斐波那契数列可以由递归,迭代以及数学计算得到。
#include <iostream>
#include <cmath>
using namespace std;
int f[1000];
int Fib1(int n)
{
if (n <= 1) {
return n;
}
else
return Fib1(n-1)+Fib1(n-2);
}
int Fib2(int n)
{
f[0] = 0;
f[1] = 1;
for (int i = 2; i <= n; i++) {
f[i] = f[i - 1] + f[i - 2];
}
return f[n];
}
//令GS为黄金分割
//GS=(1+sqrt(5.0))/2
//F(n)=(GS)^n/sqrt(5)取整为最近的整数
int Fib3(int n)
{
double GS = (1+sqrt(5.0))/2.0;
double ret = 1/sqrt(5.0)*pow(GS, n);
if (ret - (int)ret > 0.5)
return (int)ret+1;
else
return (int)ret;
}
int main()
{
int n;
cin >> n;
cout << Fib1(n) << endl;
cout << Fib2(n) << endl;
cout << Fib3(n) << endl;
return 0;
}