算法 | 【斐波那契数列与递归】 (2)

同样的,这次先用循环和递归做一遍,然后在想办法进行优化。

#include <iostream> using namespace std; /* 题目:无穷数列 1,1,2,3,5,13,21,34,55,..., 称为 Fibonacci 数列,计算第n位数列。 */ // 循环实现 int Fibonacci(int n) { /* 1 1 2 5 a=1 b=1 c=a+b=2 a=b b=c 分析: c 保存两数之和,a、b向后移动 */ int a = 1, b = 1, c = 1; for (int i = 3; i <= n; ++i) { c = a + b; a = b; b = c; } return c; } // 递归实现 int Fib(int n) { if (n <= 2) return 1; else return Fib(n - 1) + Fib(n-2); } int main() { for (int i = 1; i < 10; ++i) { cout << Fibonacci(i) << " "; cout << Fib(i) << endl; } return 0; }

分析递归效率
对于循环来讲,它使用递推公式的方式求解,基本上没有需要优化的地方,除非我们选择使用通项公式求解,而对于当前的递归来说却还有着一些优化的空间。
递归过程分析:如:欲求的第五位斐波那契数,其递归调用方式如下

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgdzfy.html