递归和非递归:青蛙跳台阶讲解

Posted 步步为码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归和非递归:青蛙跳台阶讲解相关的知识,希望对你有一定的参考价值。

递归的介绍:程序调用自身的编程技巧称为递归。递归是一种算法。它通常把一个复杂问题层层转化为一个与原问题相似的规模较小的问题求解。


递归的两个必要条件:

1.存在限制条件,当满足这个限制条件的时候,递归便不再继续。

2.每次递归调用之后,越来越接近这个限制条件。


解题分析:青蛙跳台阶

1.现在有N阶台阶,小青蛙一次可以跳一阶台阶,也可以一次跳两阶台阶。

2.当N = 1时,小青蛙只有一种跳法,就是跳一个台阶。

3.当N = 2时,小青蛙有两种跳法,就是连续两次跳一阶或者跳一次两阶。

4.当N = 3时,小青蛙有三种跳法,

假设第一次跳一个台阶,那么就只剩下两个台阶,就只能是按照N = 2时的跳法。

如果第一次跳两个台阶,那么就只剩下一个台阶,就只能按照N = 1时的跳法。

以此类推,形成一定的规律

当为n阶时,跳台阶的总次数为(n  - 1) +(n  - 2)


注意:这里的(n - 1)代表的是当N = n - 1时青蛙跳台阶一共有多少种跳法。所以要计算n - 1 个台阶的总跳法,就是( n - 2) + ( n - 3)

代码展示:递归

递归和非递归:青蛙跳台阶讲解_递归

缺点:耗时长,从后面往前算,很多数字要算重复,容易造成stack overflow(栈溢出)。

非递归:

递归和非递归:青蛙跳台阶讲解_青蛙跳台阶_02

缺点:要考虑存储空间,当N过大时,int类型可能存不下,会溢出,造成求出来的结果错误。

总结:

青蛙跳台阶和斐波那契数列是有相似之处,只不过斐波那契数列前两位数都是1;而青蛙跳台阶前两位数是1 和 2。其他的思路是一致的。


以上是关于递归和非递归:青蛙跳台阶讲解的主要内容,如果未能解决你的问题,请参考以下文章

青蛙跳台阶衍生之变态跳台阶(递归,思路分析及代码实现)

汉罗塔与青蛙跳台阶的递归实现(及扩展青蛙跳台阶)C语言从入门到入土(入门篇)(算法篇p2)

递归问题闲究——青蛙跳台阶

方法递归(斐波那契数列,青蛙跳台阶,汉诺塔问题)

方法递归(斐波那契数列,青蛙跳台阶,汉诺塔问题)

方法递归(斐波那契数列,青蛙跳台阶,汉诺塔问题)