青蛙跳台阶问题详解

问题:一青蛙一次可以跳一个台阶,也可以跳两个,当跳到第n级时,有多少中跳法?

解析:

设青蛙跳到第n级时有Jump(n)种跳法

我们可以倒着看问题,当青蛙跳到第n阶时,它最后一跳有两种跳法,一种是跳了一阶,从n-1阶跳到了n阶,另一种是跳了两阶,从n-2阶跳到了n阶

青蛙跳到第n-1级时有Jump(n-1)种跳法,跳到第n-2级时有Jump(n-2)种跳法

所以Jump(n) = Jump(n - 1) + Jump(n - 2)

其实就是一个斐波拉契数列:

当n=1时,Jump(n)=1

当n=2时,Jump(n)=2

当n>2时,Jump(n) = Jump(n - 1) + Jump(n - 2)

因此我们可以使用递归方法解决问题:

代码很简单,只需要按公式写就好了—— 

但是使用这种方法有一个问题就是,当n的数目很大时,会出现非常大量的重复计算,比如我们要计算Jump(48) ,我们就必须计算Jump(47)、Jump(46),要计算Jump(47)就要计算Jump(46)和Jump(45),多推几个就会发现由此产生了大量的重复,效率非常低。

所以我们还可以用迭代的方法解决问题:

这次我们来正向计算这个问题,要求跳到某一阶的跳法,其实只需要把它前面在前面两阶各自的跳法加起来就好了,然后我们已经知道了跳到第一阶有一种跳法,跳到第二阶有两种跳法,那么自然跳到第三阶的跳法就有1+2=3种,剩下的要做的就是不停地加最后两项,不断得到下一项,最后得到n阶时的跳法。

所以,当n大于2时,我们利用一个while循环,设a,b,c,令a,b作为最后两项,c作为最后一项,a的初始值为1,b的初始值为2,让c=a+b,然后再把b的值赋给a,c的值赋给b,这样就更新了最后两项的值,以便实现下一次循环。

为了让循环顺利进行,我们每次循环都要把n减掉1,这样当n=2的时候,循环就会停止,也就是一共循环了n-2次,而n-2次循环后我们得到的跳法个数正是我们需要的Jump(n)!

代码如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值