五分钟走进斐波那契——C语言基础递归篇

简介: 应用👏递归与迭代,之前已经接触过n的阶乘,但代码显得比较老实,不能显现出C语言的灵活性,在引入递归后,我们就可以考虑更高级的情况。

应用👏

递归与迭代,之前已经接触过n的阶乘,但代码显得比较老实,不能显现出C语言的灵活性,在引入递归后,我们就可以考虑更高级的情况。


其实用循环去解决阶乘也很简单,无非就是n*(n-1)(n-2)……一直如此循环下去,而反过来思考更简单,直接产生1~n的数字再累计乘在一起,只需整一个乘等于的循环,我们这里引入递归;首先自义定一个函数Fac,Fac需满足阶乘要求,思路如下:

image.png

再撸上咱的代码,完美:

image.png

斐波那契数列👏

于是,咱就以此继续研究斐波那契数列。


概念👏

又称黄金分割数列,因数学家莱昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:


0、1、1、2、3、5、8、13、21、34、……


斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)


实现👏

首先根据斐波那契数列的判定标准构思出大致框架,斐波那契数列以递推的方法定义,这时我们要来描述斐波那契的第n个数时,假设用函数 Fib表示:

image.png

利用阶乘的基本框架主函数,撸上代码:

            //斐波那契数列
      Fib(int n)
      {
        if (n <= 2)
          return 1;
        else
          return Fib(n - 1)+Fib(n-2);//递归调用Fib函数
      }
      int main()
      {
        int n = 0;
        int ret = 0;
        scanf("%d", &n);
        ret=Fib(n);
        printf("ret = %d\n", ret);
        return 0;
      }

运行结果如下:

image.png

递归的两个必要条件,是不是都满足了就没有任何问题了呢?注意并不是只有那些死递归才会栈溢出,具体某些特定环境下也会造成堆栈。


要深入研究递归的,接下来我会出一期函数递归的经典题目:汉诺塔问题,青蛙跳台阶问题。


TDD👏

我在研究一个函数时我都先去写它该怎么用,然后再去实现这个函数,这种实现方式或设计思路称为 TDD(测试驱动开发)。


TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。TDD虽是敏捷方法的核心实践,但不只适用于XP(Extreme Programming),同样可以适用于其他开发方法和过程


那我们为什么需要TDD这玩意儿呢?


首先是需求分析,想不清楚细节,

管他呢,先开始写发现需求细节不明确,去跟业务人员确认

确认好几次终于写完所有逻辑

运行起来测试一下,靠,果然不工作,调试

调试好久终于工作了

转测试,QA 测出 bug,debug, 打补丁

终于,代码可以工作了

相关文章
|
1月前
|
存储 编译器 C语言
爱上C语言:函数递归,青蛙跳台阶图文详解
爱上C语言:函数递归,青蛙跳台阶图文详解
|
2月前
|
机器学习/深度学习 存储 C语言
c语言从入门到实战——函数递归
函数递归是指一个函数直接或间接地调用自身,以解决问题的一种方法。在C语言中,函数递归可以用来计算阶乘、斐波那契数列等数学问题。 函数递归是一种编程技术,其中函数直接或间接地调用自身来解决问题。它常用于处理可以分解为更小同类问题的复杂问题,如排序、搜索树等。递归的基本思想是将问题分解为更简单的子问题,然后组合子问题的解来得到原问题的解。然而,递归需要小心处理终止条件,否则可能导致无限循环。此外,递归可能消耗大量内存,因为它需要存储每个递归调用的状态。因此,在使用递归时,应仔细考虑其效率和适用性。
33 0
|
2月前
|
机器学习/深度学习 存储 算法
C语言栈与递归的实现讲解
C语言栈与递归的实现讲解
26 0
|
2月前
|
算法 C语言
【专业解码】递归求和在C语言中的神操作!只需1秒,你也能轻松开挂
【专业解码】递归求和在C语言中的神操作!只需1秒,你也能轻松开挂
|
2月前
|
C语言
C语言实现递归版多子棋的设计(下)
C语言实现递归版多子棋的设计
|
2月前
|
C语言
C语言递归问题【青蛙跳台阶】和【汉诺塔】
C语言递归问题【青蛙跳台阶】和【汉诺塔】
|
7天前
|
C语言
【C语言/数据结构】排序(快速排序及多种优化|递归及非递归版本)
【C语言/数据结构】排序(快速排序及多种优化|递归及非递归版本)
9 0
|
18天前
|
机器学习/深度学习 C语言
函数递归深入解析(C语言)
函数递归深入解析(C语言)
|
21天前
|
C语言 索引
c语言的函数与递归
c语言的函数与递归
15 1
|
27天前
|
C语言
斐波那契数列(C语言)
斐波那契数列(C语言)
斐波那契数列(C语言)