斐波那契数列的优化
2017-06-03 11:22
120 查看
学校里变经常用递归的方法来将斐波那契数列,虽然这样的程序很简单,明了,但是他的效率并不高。
而且当递归的深度异常大时,很容易造成栈溢出。
例如,当用斐波那契数列的第六项时,会计算fibo(5)+fibo(4)而计算fibo(5) = fibo(4)+fibo(3)
,而计算fibo(4) = fibo(3)+fibo(2)。所以,造成了fibo(4)和fibo(3)等数值大量的重复计算。
所以可以用其他的方式替代,例如循环和查表。
循环一会举例说明。现在来简单介绍一下查表。构建一个二维数组表,或者一维数组,当
递归到变量的值得时候,首先查表,表中没有,则继续,并将继续的结果放到表里边。如果表中
已经存在,则直接取值。
接下来我举例说明循环方法的效率和递归的效率。
int num = 0; int Fibonacci(int x)// 递归 { if(x <= 0) { cout<<"error\n"<<endl; exit(1); } else if(x == 1 || x == 2) return 1; num++; return Fibonacci(x-1)+Fibonacci(x-2); } int main() { int x; while(cin>>x && x!=-1) { cout<<"Fibonacci:"<<Fibonacci(x)<<endl; cout<<"num:"<<num<<endl; } return 0; }
计算fibo(10),递归次数num = 54.
int num = 0; int Fibonacci_cycle(int x) { if(x <= 0) return 0; else if(x == 1 || x == 2) return 1; int first = 1; int second = 1; for(int i = 3; i <= x; ++i) { int tmp = second; second += first; first = tmp; num++; } return second; } int main() { int x; while(cin>>x && x!=-1) { cout<<"Fibonacci:"<<Fibonacci_cycle(x)<<endl; cout<<"num:"<<num<<endl; num = 0; } return 0; }
计算fibo(10),循环方法计算次数num = 8.
相关文章推荐
- 斐波那契数列的优化问题 青蛙跳台阶问题
- 【递归算法】 斐波那契数列的备忘录优化
- 斐波那契数列的算法优化
- 用HashMap优化斐波那契数列 java算法
- 斐波那契数列的优化
- 由斐波那契数列所引发的性能优化
- 矩阵快速幂优化递推式 例:斐波那契数列 poj 3070
- 递归函数最简单:阶乘,斐波那契数列及其优化
- 斐波那契数列的优化解法
- 斐波那契数列递归实现和优化
- Python 斐波那契数列优化
- 重构 优化斐波那契数列--Java
- 斐波那契数列(二)--矩阵优化算法
- 斐波那契数列(c++数组实现,递归实现与优化)
- 斐波那契数列的递归优化实现
- 51nod 巨大的斐波那契数列(矩阵快速幂),递推式优化的好模板!!!!!!!
- 51nod--1242 斐波那契数列第N项 (矩阵乘法优化)
- 斐波那契数列 矩阵求法 优化,解析矩阵快速幂
- 斐波那契数列的优化
- 关于斐波那契数列的优化