写一个函数,输入一一个数n,求斐波那契数列的第n项为多少
n = 0 时 f(n) = 0; n = 1 时 f(n) = 1; n > 1 时 f(n) = f(n - 1) - f(n - 2) ;
很多人一下子就想到了递归,可是这样的数列递归的话如果n很大呢?递归一直都在生产重复的不必要的数,当你输入100时,整个程序几乎得不到结果,因为递归的复杂度是呈指数倍增长,答案要等很长的时间,而我这里从底层入手,一个一个向上加,效率比递归高,特别是在n很大的情况下。
#include <iostream>
using namespace std;
int func(unsigned int n)
{
if(n == 0)
return 0;
if(n == 1)
return 1;
if(n >= 2)
{
int Fn;
int F1 = 0;
int F2 = 1;
for(int k = 2; k <= n; k++)
{
Fn = F1 + F2;
F1 = F2;
F2 = Fn;
}
return Fn;
}
}
int main()
{
unsigned int n, ret;
cin >> n;
ret = func(n);
cout << ret <<endl;
return 0;
}