直接上代码:
#include <iostream>
using namespace std;
//斐波那契函数是递归是一个经典的案例
//但是递归会有几个缺点:
// (1)会有重复的计算
// (2)会产生递归栈,空间复杂度高
// (3)栈是很小的,递归栈溢出的情况,所以递归不能递归的深度很深
//下面来看递归实现,时间复杂度为n的指数级增长,空间复杂度也为o(n),随着n的增大计算量会急剧增加
int Fibonacci(int number)
{
if(number < 0)
{
exit(-1); //error跳出程序
}
if(number==0 || number==1)
{
return number;
}
return Fibonacci(number-1)+Fibonacci(number-2);
}
//非递归实现
int Fibonacci1(int number)
{
if(number < 0)
{
exit(-1); //错误,退出
}
if(number==0 || number==1)
{
return number;
}
int numberFirst = 0;
int numberSecond = 1;
int result = 0;
for(int i=2; i<=number; ++i)
{
result = numberFirst + numberSecond;
numberFirst = numberSecond;
numberSecond = result;
}
return result ;
}
int main()
{
cout<<Fibonacci(5)<<endl;
cout<<Fibonacci(0)<<endl;
//cout<<Fibonacci(-5)<<endl;
cout<<Fibonacci1(5)<<endl;
cout<<Fibonacci1(0)<<endl;
cout<<Fibonacci1(-5)<<endl;
return 0;
}
当然这并不是最快的代码,还有logn复杂度的代码,证明过程有时间再看,后期补上。