青蛙跳台阶

wang-编程日记四:

青蛙跳台阶问题(斐波拉契蛾数列应用)

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶,请问这只青蛙跳上n级台阶总共有多少种跳法?

解法一://递归 

青蛙只有两种跳法要么跳一级要么跳两级,如果从第n次开始回溯这思考,(n有两种可能n-1或n-2,n-1有两种可能n-2或n-3,n-2有两种可能n-3或n-4)。

所以从第一次开始思考(假设台阶大于2,那么3有两种可能1或2,4有两种可能3或2,··)发现规律当前台阶数可能跳法=台阶数-1可能跳法+台阶数-2可能跳法(f(n) = f(n - 1)+f(n -2))递归实现还是比较简单的。

代码:

int fun(int n )
{
if (n == 2)
return 2;
else if (n == 1)
return 1;
else if (n == 0)
return 0;
return fun(n - 1) + fun(n - 2);
}

解法2://动态规划(意思可以百度)

                 5

          4                   3

      3    2              2     1

  2           1


在解法1中会发现假设n=5,那么他要计算重复的两次n = 3,如果n的次数增大则重复计算的次数也越多,所以如果把计算过的n存在数组中,每次计算直接利用访问数组那么计算速度就会优化非常多

代码:

int climbStairs(int n) {
vector<int> memory(n+1,-1);
memory[0] = 0;
memory[1] = 1;
memory[2] = 2;
for (int i = 3; i <= n; i++)
memory[i] = memory[i - 1] + memory[i - 2];
return memory[n];
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值