问题描述
青蛙有两种跳法,可以一次跳一个台阶,也可以一次跳两个台阶
问跳n个台阶有多少种跳法
问题分析
对于递归问题,我们无需把问题想得过于复杂,要明白递归本身就是找规律,我们无需考虑太多种情况,只需要找到前几种情况展现出来的规律,就可以总结出一般规律。
无论有多少个台阶,我们只有两种选择,当选择跳一个台阶的时候,那么我们的面前就只有n-1
个台阶了;当选择跳两个台阶的时候,那么我们的面前就只有n-2
个台阶了。
所以当我们面临n-1
个或n-2
个台阶的时候,我们又只有两种选择,就好比一条路分出来两条岔路。
注意:一定要弄明白一件事,我们求解的是有多少种跳法,而不是要跳多少次,就是1和2的排列组合起来的种数【我当时就混淆了很久,一直没理解】
我们用Step()
函数来求解有多少种跳法,由于跳一个台阶只有一种跳法,两个台阶有两种跳法(一次跳一个,跳两次,这是一种跳法;或者一次跳两个,直接跳完,这是另一种跳法),当n>=3
时,我们就可以用表达式来表示,Step(n)=Step(n-1)+Step(n-2)
这样就包含了所有的种数(是不是感觉很像斐波那契数列),你的面前有两条路,每一条路都包含了接下来的两种情况,所以,把他俩加起来递归就可以了。
完整代码
#include <stdio.h>
int Step(int n)
{
if (n <= 2)
{
return n;
}
return Step(n - 1) + Step(n - 2);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = Step(n);
printf("%d\n", ret);
return 0;
}
如有疏漏和建议,请评论留言哦!!