题目
Fibonacci数列定义如下:
输入n,求f(n)
分析
在剑指offer上有个O(logn)的算法,本文只做O(n)算法的分析。这其实是一个简单的动态规划问题,问题的结果跟子问题的结果相关,关系式已经给出了,计算中需要保存子问题的结果
跳台阶问题:一个台阶一共有n阶,一次起跳可以跳一阶,也可以跳二阶。问总共有多少中跳法,并对时间复杂度进行分析。该问题也是典型的Fibonacci数列问题,第一次跳1个台阶,接下来有f(n-1)中跳法,第一次跳2个台阶,则接下来有f(n-2)个跳法。
代码
long Fibonacci(unsigned int n)
{
unsigned int fn=n,fn1=1,fn2=0;
unsigned int x=2;
while (x<=n)
{
fn=fn1+fn2;
fn1=fn;
fn2=fn1;
x++;
}
return fn;
}