题目: 求斐波那契梳理的第n项
不推荐递归解法,循环解法:
自底向上计算
其实就是模拟人手动计算的过程
算f(2)、f(3)……f(n)
int main()
{
int n = 6; //计算f(6)
int fibZero = 0, fibOne=1;
int fibN;
//开始计算f(n) 从f(2)开始计算
for (int i = 2; i <= n;i++){
fibN = fibZero + fibOne;
fibZero = fibOne;
fibOne = fibN;
}
cout << fibN;
}
拓展:求斐波那契数列的前N项和
其实很简单,
F(0) = F(0) = f(0)
F(1) = F(0) + F(1) = f(0) + f(1)
F(2) = F(1) + F(2) = f(0) + f(1) + f(0) + f(1) = 2*(F(1))
题目: 青蛙跳问题,青蛙可以一次跳 1~2 阶台阶,跳上n级台阶有多少跳法?
等价于斐波那契数列
升级版:
题目: 青蛙跳问题,青蛙可以一次跳 1~n 阶台阶,此时跳上n级台阶又多少种跳法?
f(1) = 1
f(2) = f(2-1) + f(2-2)
f(3) = f(3-1) + f(3-2) + f(3-3)
其中如 f(3-1) 表示青蛙一次跳1阶加上跳 (3-1)阶的跳法
那么:
f(n-1) = f(n-2) + f(n-3) + …… + f(0)
f(n) = f(n-1) + f(n-2) + f(n-3) + …… + f(0)
= f(n-1) + f(n-1)
= 2 * f(n-1)
数学归纳法可证
f(n) = 2^(n-1)