题目
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:f(n) = f(n-1)+f(n-2);
递归解法
int fib(int n)
{
if(n<==0)
{
return 0;
}
if(n==1)
{
return n;
}
return fib(n-1)+fib(n+2);
}
此递归的时间效率是指数级,效率极低。
自低而上
f(n) = f(n-1) + f(n-2);
int dp[n+1];
dp[0] =0;
dp[1] = 1;
for(int i=2;i<=n;i++)
{
dp[i] = dp[i-1] + dp[i-2];
}
return dp[n];
自低而上的方法时间效率是O(n), 空间效率是O(n);
更快的效率 矩阵乘法
时间效率是O(logn);