青蛙跳台阶问题有许多版本,这里将解决的是最基础的青蛙跳台阶问题。游戏规则如下:
青蛙一次可以跳1级或者2级台阶,问跳到N级有多少种跳法?
这是一个类似于斐波那契数列的数学问题,不过斐波那契数列开始是1,1,2,3,5,8……而该问题是1,2,3,5,8……开始,内容大同小异,理解方式可谓是一模一样。这里我们从两种方法去解决这个问题。
方法一:
先上图
利用函数的递归求解。
在青蛙跳一层台阶时,只有一种跳法;
青蛙跳两层台阶时,有两种跳法;
在青蛙跳第三层台阶时可看做让其先跳一层台阶,然后还剩两层台阶就看做两层台阶跳法(假设跳法看做函数sum,则有sum(3)=sum(1)+sum(2));
当跳第四层台阶时,同理看做先跳一层,然后看做三层台阶的跳法,或者先跳两层,剩下两层看做两层台阶的跳法,则有sum(4)=sum(3)+sum(2);
用相同的方法,当青蛙第一次只跳一层或者两层,则恒有sum(n)=sum(n-1)+ sum(n-2)。这样便可以弄清楚最简单青蛙跳台阶问题。但是这种方法存在一个弊端。
如图:
再进行台阶数较多的计算中难以计算,对于效率十分低下。所以这时我们再走过一种方法。
方法二:
上图:
在函数中构建局部变量,再利用循环将所求和导出这样对计算机的要求并不高,大大提升了效率。注意(i>=3与i--是非常重要的,我们需要用这个来循环结束。为什么是i>=3呢?因为在i=1和i=2时是起始的两个元素我们需要用到这两个元素去求后面的元素,而i=1 或者2是,我们应该知晓的值,类似于数学数列给的前后关系,需要给出的两个值)
计算50层的跳法:
为什么会是负值?因为程序的值得范围是有限的,超出了这个范围的旨,计算机将随机给出一个值,所以我们目前也只能用一个计算小一些的目标值。但是方法思想是正确的。
人生第一篇CSDN。
哈哈哈哈写到后面有一些词穷了,水一下了😊😊