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

Posted 知晓天空之蓝

tags:

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

      今天继续来为我的懒狗行为买单。\'递归问题闲究——青蛙跳台阶_日常\'

      继汉诺塔问题之后,接下来就是青蛙跳台阶问题:​一只青蛙一次可以跳上1级,也可以跳上2级,求该青蛙跳上一个n级的台阶总共有多少种跳法。刚开始感觉像是在算阶乘,因为先后次序不同算不同的结果嘛;细想就发现我格局低了,这题其实很有意思。

        那么我们先分析一下,我青蛙只能跳1或2级,一级台阶只有一种;跳二级时,可跳两次一级或跳一次二级;跳3级时,跳一个二级和一个一级,即二级台阶跳法+一级台阶跳法;跳四级时,先跳一级后,剩三级台阶;或先跳两级,剩二级台阶,可能性就是三级台阶跳法+二级台阶跳法……

 (综上所述,当跳n级台阶时,我们就需执行(n-1)级和(n-2)级台阶跳法),最后把这个思路放入递归,如下:

#include<stdio.h>
int Frog(int n)
{
if (n == 1)
{
return 1;
}
if (n == 2)
{
return 2;
}
return Frog(n - 1) + Frog(n - 2);

}

int main()
{
int n = 0;
printf("please input the number of steps:");
scanf("%d", &n);
int num = Frog(n);
printf("%d\\n", num);

return 0;
}

结果如下:

\'递归问题闲究——青蛙跳台阶_日常_02\'

       当然这只是针对的是初识步数对应为n =1或n=2时,我们继续深入思考一下,当n更大时,n=3,4,5,……,m 时又该怎么办呢?这时候我们可以把函数再补充一下。

        

#include<stdio.h>
int Frog(int n,int m)
{
if (n == 1)
{
return 1;
}
if (n == 2)
{
return 2;
}
if (n == 3)
{
return 4;
}
……
……
if(n==m)
{
return ?; //(跳m级台阶方案)
}
Frog(n-1)+Frog(n-2)+Frog(n-3)+……+Frog(n-m);
}

        今天就到此为止,眠了家人们。

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

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

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

C语言汉诺塔与青蛙跳台阶——递归的简单应用

经典递归问题:青蛙跳台阶,跳1个,2个或者3个

递归经典:汉诺塔问题和青蛙跳台阶的三个问题(爆肝的数学推理步骤以及详细代码)

剑指Offer-循环和递归面试题10.2:青蛙跳台阶