Time Limit: 10 second
Memory Limit: 2 MB
问题描述
楼梯有n级台阶,上楼可以一步上一个台阶,也可以一步上两个台阶。编写一递归程序计算共有多少种不同的走法?
Input
输入台阶数n
Output
输出走法总数
Sample Input
3
Sample Output
3
【题解】
可以先想想简单的情况,到达第一级阶梯,只有一种方法,就是从地面到第一级。然后是第二级阶梯,可以从地面直接上两级 直接到第二级,也可以从地面到第一级然后到第二级。
所以a[1] = 1,a[2] = 2;则第三层可以从第1层上两层到,也可以从第二层直接上一层就到。所以a[3] = a[1] + a[2];以此类推。
可以得出递推公式a[i] = a[i-1] + a[i-2];
【代码】
#include <cstdio> #include <stdlib.h> int n,a,b,c; void input_data() //输入n { scanf("%d",&n); a = 1; b = 2; } void get_ans() { if (n == 1) //首先要対n == 2和 n==1 的情况进行特判。 { printf("%d ",a); exit(0); } if (n == 2) { printf("%d",b); exit(0); } for (int i = 3;i <= n;i++) //大于等于3的情况则要递推,用a,b,c三个变量循环使用 { c = a + b; a = b; b = c; } printf("%d",c); //最后输出c } int main() { input_data(); get_ans(); return 0; }