问题:
假设你正在爬楼梯。需要 n
阶你才能到达楼顶。每次你可以爬 1
或 2
个台阶。你有多少种不同的方法可以爬到楼顶呢?
输入:
输入包含若干行,每行包含一个正整数n,代表楼梯级数,1<=n<=30
输出:
不同的走法数,每一行输入对应一行输出
样例输入:
5
8
10
样例输出:
8
34
89
思路:
1.主函数:
利用while进行多个N的输入,直接输出函数返回值;
2.递归函数:
(1)将第n级台阶与第n-1级以及第n-2级台阶联系在一起:
n级台阶的走法=先走一级后,n-1级台阶的走法+先走两级后,n-2级台阶的走法;
f (n)=f (n-1)+f (n-2);
(2) 边界条件:n<0 0, n=0 1; n=0 1, n=1 1; n=1 1, n=2 2;
#include<iostream>
#include<cstdio>
using namespace std;
int N;
int stairs(int n) //利用递推关系和边界关系编写递归函数
{
if(n==1)
return 1;
if(n==2)
return 2;
return stairs(n-1)+stairs(n-2);
}
int main()
{
while(cin>>N) //利用while可输入多组N
{
cout<<stairs(N)<<endl;
}
return 0;
}