当前位置: 首页 > news >正文

C语言 之递归函数

今天来总结一下关于递归函数的使用方面的问题。

  递归函数就是在函数使用的时候自己调用自己,层层调用,来实现你想要的功能。

  有两个最常用的例子,我们来写一下。

  (1)计算阶乘

#include <stdio.h>

int factorial(int n); // 函数声明(阶乘)

 

int main(void)

{

int a = 5;

printf("%d的阶乘是:%d.\n", a, factorial(a));

 

return 0;

}

int factorial(int n)

{

if (n < 1)

{

printf("error.\n");

return -1;

}

 

if (n == 1)

{

return 1;

}

else

{

return (n * factorial(n-1));

}

}

  (2)斐波那契函数

#include <stdio.h>

int fibonacci(int n); // 函数声明(斐波那契函数)

  int fibonacci(int n)  

{  

    if (n == 0) return    0;  

    if (n == 1) return    1;  

  

    return  fibonacci(n - 1) + fibonacci(n - 2);  

}  

int main(void)  

{  

    int a;

    printf("%d的斐波那契函数值为%d",a,fibonacci(a));

    return   0;  

}  

第二个可能不太容易看明白,我们来分析一下

首先,这个假设一个数为n , 

  第一次递归,f(n)=f(n-1)+f(n-2)

  第二次递归分为两个部分,

  f(n-1)=f(n-2)+f(n-3) f(n-2)=f(n-3)+f(n-4)

  第三次递归分为四个部分……一直递归到0和1为止。

  所以n==0或者n==1的时候返回一个常数很重要,要不然就会一直递归下去,直到触发段错误。 

相关文章:

  • C语言 之建立静态链接库
  • ARM的PWM定时器1
  • RTC闹钟的中断处理方法以及程序设计
  • altium designer 制作元器件封装库
  • VTK的Mapper
  • VTK交互系统 1 交互模式入门
  • VTK显示像素图
  • VTK交互系统 2 交互器样式
  • VTK交互系统 3 自定义交互器样式
  • VTK交互系统 4 自定义交互器样式2 键盘鼠标交互器设置
  • Qt多线程1
  • Qt多线程2
  • 基于QT的文件管理软件编写 系列 引言
  • 基于QT的文件管理软件编写 系列 1
  • python安装tensorflow
  • #Java异常处理
  • ES学习笔记(12)--Symbol
  • Hibernate最全面试题
  • HTTP中的ETag在移动客户端的应用
  • Java比较器对数组,集合排序
  • Java面向对象及其三大特征
  • JDK 6和JDK 7中的substring()方法
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Redis中的lru算法实现
  • Ruby 2.x 源代码分析:扩展 概述
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • XML已死 ?
  • 第2章 网络文档
  • 算法---两个栈实现一个队列
  • 一些关于Rust在2019年的思考
  • 原生js练习题---第五课
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​力扣解法汇总946-验证栈序列
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (2)(2.10) LTM telemetry
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (C语言)fgets与fputs函数详解
  • (C语言)逆序输出字符串
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (二十三)Flask之高频面试点
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (过滤器)Filter和(监听器)listener
  • (五)Python 垃圾回收机制
  • (五)网络优化与超参数选择--九五小庞
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • *** 2003
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .Net8 Blazor 尝鲜
  • .NET性能优化(文摘)
  • @GetMapping和@RequestMapping的区别