欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

斐波那契数列递归解法

发布时间:2025/3/21 56 豆豆
生活随笔 收集整理的这篇文章主要介绍了 斐波那契数列递归解法 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

递归解斐波那契数列

斐波那契数列最直观的递归解法:

int fib(int n){if (n<2) { return n;} else {return fib(n-1) + fib(n-2);} }

然而这种解法效率很低,会进行很多重复运算

例如:当计算 fib(5) 时,我们共需要计算1次 fib(4),2次 fib(3),3次 fib(2),5次 fib(1) 和3次 fib(0)。这些无意义的重复计算使得递归效率极低。

递归解法的优化

实际上像斐波那契这样的数列还有很多,他们都满足相同的规律,即从第三项开始,每一项等于前两项之和。这样的数列被统称为可加数列(additive sequence),不同的只是他们的第一项 t0 和 t1

斐波那契数列:
0,1,1,2,3,5,8,13,21,34,55,…0, 1, 1, 2, 3, 5, 8,13,21, 34,55,\dots0,1,1,2,3,5,8,13,21,34,55,

如果我们将它的第一项和第二项换成3和7,就会变成:
3,7,10,17,27,44,71,115,186,…3, 7, 10, 17, 27, 44, 71,115,186, \dots3,7,10,17,27,44,71,115,186,

因此,求解斐波那契数列第n项的问题可以被转化成求解一个可加数列的第n项的问题,而且只需要知道 t0 和 t1 的值,我们就可以求出数列中的任意一项。所以我们可以写出一个函数:

int additiveSequence(int n, int t0, int t1);

下一步就是实现这个函数。继续观察可加数列,我们可以发现一个可加数列S中的第n项等于将这个数列每一项都向前移一位的新数列的第n-1项。

例如,原数列中的t6 = 71:

当我们将该数列每一位都向前移动一位,得到一个新数列,此时 t5 = 71:

而这个新的 t0 等于原数列的 t1,新的 t1 等于原数列的 t0 + t1

因此函数可以写为:

int additiveSequence(int n, int t0, int t1){if (n==0) return t0;if (n==1) return t1;return additiveSequence(n-1, t1, t0+t1); }

递归求解斐波那契数列的完整函数就可写为:

int fib(int n){return additiveSequence(n, 0, 1); }int additiveSequence(int n, int t0, int t1){if (n==0) return t0;if (n==1) return t1;return additiveSequence(n-1, t1, t0+t1); }

总结

以上是生活随笔为你收集整理的斐波那契数列递归解法的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。