题目描述
树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数
例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级也可以第一次走两级,第二次走一级,一共3种方法。
输入格式
输入包含若干行,每行包含一个正整数N,代表楼梯级数,1 <= N <= 30
输出格式
不同的走法数,每一行输入对应一行输出
样例输入
5 8 10
样例输出
8 34 89
分析
当楼梯为1级时,一共有1种方法;
(每次都走1级)
当楼梯为2级时,一共有2种方法;
(第一次走1级,第二次走1级;每次都走2级)
当楼梯为3级时,一共有3种方法;
(每次都走1级;第一次走1级,第二次走2级;一次走2级,第二次走1级)
当楼梯为4级时,一共有5种方法;
(每次都走1级;第一次走1级,第二次走1级,第三次走2级;第一次走1级,第二次走2级,第三次走1级;第一次走2级,第二次走1级,第三次走2级;第一次走2级,第二次走2级,第三次走1级)
综上所述,将数据总结为以下表格。
m(楼梯级数) 1 2 3 4 5 6 7 ......
n(走法总数) 1 2 3 5 8 13 21 ......
通过以上分析,我们可以看见:这是一个典型的递归问题。由数据可以得到以下规律:
F(n)=1;(n=1)
F(n)=2;(n=2)
F(n)=F(n-1)+F(n-2);(n>=3)
C语言代码
#include<stdio.h>
int calculate(int n)
{
if(n==1)
return 1;
else if(n==2)
return 2;
else if(n>=3)
return calculate(n-1)+calculate(n-2);
}
int main()
{
int n,t;
while(scanf("%d",&n)!=EOF)
{
t=calculate(n);
printf("%d\n",t);
}
return 0;
}
总结
关键是在文字语言中提取关键信息,找到数学规律—递归!
递归的基本思想就是把规模大的问题转化为规模小的相似的子问题来解决,说白了大事化小小事化了。递归最重要的是要有明确的结束条件(出口),否则就会导致无限递归的情况。