第一种是课本上的遍历和课本上的递推。
第三种,O(logn)的,请看july同志的blog.
需要注意的是这个数列的某一项的值可能很大,所以尽量,尽量做好防溢出的准备。
#include <iostream>
#include <cstdlib>
using namespace std;
long int fob(int n)
{
if (0 == n)
return 0;
else if(1 == n || 2 == n)
return 1;
else
return fob(n - 1) + fob(n - 2);
}
long int fob1(int n)
{
int fob_0 = 0;
int fob_1 = 1;
long int result = 0;
if(n == 0)
return 0;
else if(1 ==n || 2 == n)
return 1;
else
for(int i = 1; i <n; ++i)
{
result = fob_1 + fob_0;
fob_0 = fob_1;
fob_1 = result;
}
return result;
}
int main(void)
{
int n = 16;
// long int result = fob(n);
long int result = fob1(n);
cout << "restlt is :" << result << endl;
return 0;
}