1.介绍斐波那契数列:
描述:斐波那契数列(Fibonacci sequence),指的是这样一个数列: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*)
总之,就是从第三个数开始,接下来的每个数,都是前两个数的相加之和;
2.下面是斐波那契算法的代码演示:
在这里插入代码片: #includeusing namespace std; int Fibonacci(int i) { if(i==0) { return 0; } else if(i==1) { return 1; } else { return Fibonacci(i-1)+Fibonacci(i-2); } } void main() { int i,n; cout<<"请输i的值:"< >i; n=Fibonacci(i); cout << "输出前几项之和为"<
3.流程图分析斐波那契算法:
从这里我们可以看出,斐波那契的算法中会有较多的重复性运算,使时间复杂度大大增加了,大家可以看一下流程图,这里只用fib(5),就把简单的运算大大增加了,如果我们把所需要求得数字增加,那运算得时间就会大大增加,所以我们可以推出斐波那契的时间复杂度为:
递归算法:T(n)=O(2^n);
4.下面用简单的循环算法与递归算法,解斐波那契作比较:在这里插入代码片: #includeusing namespace std; int fib(int n) { if(n==0) { return 0; } if(n==1) { return 1; } int first=0; //第一个值 int second=1; //第二个值 int sum; if(n>=2) { for(int i=2; i<=n; i++) //在循环时间内的计算为:(2n-1)*5+1 { //所以时间复杂度估算为:T(n)=O(n) sum=first+second; //将计算的值得出 first=second; //将计算后的值往后覆盖 second=sum; } return sum; } } void main() { int n,sum; cout << "请输入所需要输入的值" << endl; cin >> n; sum = fib(n); cout << "计算求和的值为:"< 在这里用循环,时间复杂度是大大减小的,也减少了重复的计算,通过估算的时间,用循环计算斐波那契的时间复杂度为:循环算法:T(n)=O(n);
相同的结果,可以很好的知道哪个方法更好;
在算法中,时间复杂度是越少越好,所以这里用循环解斐波那契会更好:
T(n)=O(n) < T(n)=O(2^n);



