今天我们来聊聊青蛙跳台阶问题,为题如下:
从前有一只青蛙他想跳台阶,有n级台阶,青蛙一次可以跳1级台阶,也可以跳2级台阶;问:该青蛙跳到第n级台阶一共有多少种跳法?
我们拿到问题之后往往不要慌,我们先来把前几次台阶数较少的画图来分析一下
假设当n = 1,只有一个台阶,那么就只有一种跳法
那么当n = 2的时候呢?青蛙可以先跳一次,再跳一次。也可以直接两个直接跳上去,所以有2种跳法
那么当n = 3的时候呢?又是几种?按照同样的方法来数一下
接下来当n = 4的时候,你会发现,他第一步有两种跳法,你跳了1步那么接下来剩下3个台阶,就是n = 3的情况,而n = 3的情况,我们上面也分析过了。如果你第一步跳2个台阶呢?那剩下来的就是2个台阶,就是n = 2的情况,我们上面也分析过,以此类推…
我们就可以发现,当取n个台阶的时候,我们都可以把他用n - 1和n - 2个台阶的跳法来表示,所以我们可以得到当n = 4的时候,一共有(n = 3)+(n = 2) = 5种跳法,n = 5的时候,一共有(n = 4)+(n = 3) = 8种跳法,这就得出了,本道题其实就是一种斐波那契数列
从第三个台阶开始都为第n-1和n-2个台阶跳法之和。所以我们能列出下面的公式:
分析到这,我们就能用代码来实现本道题的结果,运用函数的递归即可
//青蛙跳台阶问题 -- 递归
int frog_step(int n)
{
if (n == 1)
return 1;
else if (n == 2)
return 2;
else
return frog_step(n - 1) + frog_step(n - 2);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = frog_step(n);
printf("%d\n", ret);
return 0;
}
当我们输入n = 5的时候的出来结果为8
这样就把青蛙跳台阶问题解答完毕,就是一个起始值从1和2开始的斐波那契数列。