目录
1.题目
从前有一只青蛙他想跳台阶,有n级台阶,青蛙一次可以跳1级台阶,也可以跳2级台阶;问:该青蛙跳到第n级台阶一共有多少种跳法?
2.分析
因为青蛙每次只能跳一个台阶或两个台阶,因此可先对两种比较简单的情况分析:
跳一个台阶毫无疑问只有一种情况:一次跳一个;
跳两个台阶有两种情况:每次跳一个和一次跳两个;
2.1类比斐波那契数列
青蛙跳一个台阶有一种跳法
青蛙跳两个台阶有两种跳法
青蛙跳三个台阶?
青蛙跳三个台阶,它第一跳无非两种情况:跳一阶和跳两阶
若跳了一阶,则还剩两阶,那么就是跳两个台阶的情况;
若跳了两阶,则还剩一阶,那么就是跳一个台阶的情况;
因此跳三个台阶时相当于先分类再相加前两种情况
即跳三个台阶=跳一个台阶+跳两个台阶。
同理,青蛙跳四个台阶:
若跳了一阶,则还剩三阶,那么就是跳三个台阶的情况;
若跳了两阶,则还剩两阶,那么就是跳两个台阶的情况;
即跳四个台阶=跳两个台阶+跳三个台阶。
........
既然跳n个台阶的种数可以等于跳n-1个台阶的种数加上跳n-2个台阶的种数,那么可以将这个问题转换为类似斐波那契数列来解决。即n=(n-1)+(n-2)
3.代码示例
#include<stdio.h>
int Jump(int n)
{
if (n == 1)
return 1;
else if (n == 2)
return 2;
else
{
return Jump(n - 1) + Jump(n - 2);
}
}
int main()
{
int n;
printf("请输入台阶数:");
scanf("%d", &n);
int ret = Jump(n);
printf("共有%d种跳法。", ret);
return 0;
}
4.思路总结
解决问题时应当抓住问题的关键。
1.青蛙每次只能跳一个台阶或两个台阶;
2.输入的是台阶数,输出的数有多少种跳法。
3.善于用数学模型解决问题(如列举,转化为斐波那契数列等)