青蛙跳台阶问题详解

问题概述:有一只青蛙,每次可以跳1阶台阶,也可以跳2阶台阶,现在有n阶台阶,问该只青蛙一共有多少种算法?

整体解题思路:青蛙跳台阶的问题其实非常相似斐波那契数列的问题

通过测试,我们可以发现规律

从台阶数量为3开始,每次的总次数都是前两次的次数之和

所以同样的,我们可以用类似斐波那契的数列方式进行求解

递归算法(C语言/vs2019)

思路:(假设我们实参传递给形参的step_n值是4)

1:step_n第一次是4,if分支语句判断,前两者都不满足(即表达式都为假),执行else所控制的语句,得到return frogJumpStep(4-1) + frogJumpStep(4-2)

2:我们先执行frogJumpStep(4-2),递归调用frogJumpStep函数,这次传递的step_n是2,if分支语句判断, 第一个不满足,第二个满足, return 2那么返回原来的函数,如下所示

3:现在执行frogJumpStep(4-1), 递归调用frogJumpStep函数,这次传递的step_n是3,if分支语句判断,前两者都不满足(即表达式都为假),执行else所控制的语句,得到return frogJumpStep(3-1) + frogJumpStep(3-2)

4:这个时候,就相当于大问题,变成了小问题,然后从step_n = 3开始的这个新的递归函数frogJumpStep(3-1) 和 frogJumpStep(3-2)入手,通过同样的方式调用发现,分别返回2和1

5:最后,step_n等于3返回最终结果等于3,step_n等于4得到最终结果5

6:最后,整体流程如下

非递归算法(C语言/vs2019)

思路:(假设我们实参传递给形参的step_n值是4)

1:非递归算法的整体解题思路跟递归相似,主要是应用了循环中判断部分,已经循环体达到运算的部分。

2:从step_n等于4,进入循环,满足判断表达式部分,循环变量I < 4, 执行循环体,先让

result = stc1 + stc2 等价于 result = 1 + 2; 然后stc1 = stc2,等价于这个时候 stc1变量中保存了stc2的值,stc1 = 2;  而stc2则保存了result的值,stc2 = 3;

3:i++,等到i等于3, 3 < 4; 满足,继续执行循环体,result = stc1 + stc2, 因为stc1和stc2的值已经被改变,所以 等价于 result = 2 + 3; 然后stc1 = stc2,等价于这个时候 stc1变量中保存了stc2的值,stc1 = 3;  而stc2则保存了result的值,stc2 = 5;

4:i++, i等于4, 4 < 4; 不满足 结束循环,返回result值。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值