fibnacci数列递归/迭代实现

什么是fibnacci数列?

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称“兔子数列”,其数值为:1、1、2、3、5、8、13、21、34……在数学上,这一数列以如下递推的方法定义:F(0)=1,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)。

fibnacci数列的递归/迭代表达式


一开始想到的是这个,仔细一想发现它不是递归而是迭代;递归表达式应该就是F(n)=F(n-1)+F(n-2)

C语言递归/迭代实现Fib(n)

因为一开始想到的是迭代,就先用迭代实现的,截图如下

然后用递归实现截图如下:

有趣的是:
1.当我让尝试fib(100)时即便用unsigned long long数据大小也不够了
2.但迭代算法时fib(10)、fib(100)都是秒出结果,而递归fib(10)时还好,fib(100)时就卡住不动了,说明尽管递归方法直观和简洁,但在处理大数项时可能会导致性能问题,因为递归需要多次重复计算相同的子问题。在这种情况下,迭代方法通常更高效。

用GDB查看递归的堆栈情况

在gdb的过程中,我进一步理解了递归在处理大数项时可能会导致的性能问题。(真的是疯狂按continue)

posted @ 2023-11-01 21:49  20231309  阅读(40)  评论(0编辑  收藏  举报