递归算法:爬楼梯问题
问题描述:
某⼈需要爬楼梯,他可以每次⾛1级或2级楼梯,输⼊楼梯的级数,求不同的⾛法数
例如:楼梯⼀共有3级,他可以每次都⾛1级;或者第⼀次⾛1级,第⼆次⾛2级;也可以第⼀次⾛2级,第⼆次⾛1级。⼀共有3种爬楼梯的⽅法。
qd输⼊:
输⼊包含若⼲⾏,每⾏包含⼀个正整数N,代表楼梯的级数,1<=N<=30
输出:
不同的⾛法数,每⼀⾏输⼊对应⼀⾏的输出
样例输⼊:emba和mba有什么区别
5
8
10
样例输出:
8托福查分
34
89
问题的分析及解决:2018考研英语一答案
这题是⼀道递归的算法题。题⽬的核⼼难点只有⼀个,如何⽤递归思想去解决看似是排列组合的问题。
rido假设有N级台阶,有⼀个函数int Stairs(int N),可以输出N级台阶的⾛法。关于这N级台阶的爬楼梯⽅法,如果第⼀步⾛1级,那么剩下的N-1级台阶有Stairs(N-1)种⾛法;如果第⼀步⾛2级,那么剩下的N-2级台阶有Stairs(N-2)种⾛法。
即有:Stairs(N)=Stairs(N-1)+Stairs(N-2)
有么有很熟悉,斐波那契数列啊~当N=1时,有Stairs(1)=1;N=2,Stairs(2)=2 显然,这2个条件可以作为递归的终⽌条件,那么这个算法的代码也就轻易可以写出了
代码:
#include <iostream>
济南翻译公司using namespace std;
int stairs(int N);
void main()lis
{冬至 英文
int N;
while (cin >> N)
{
if (N <= 0 || N >= 30)//加个条件控制,不满⾜条件就退出 {
cout << "Parameter Overflow";
return;
}
el
cout << stairs(N) << endl;
}
}
int stairs(int N)
{
if (N == 1)
return 1;
el if (N == 2)
return 2;
el
alleged
return (stairs(N - 1) + stairs(N - 2));
}
delete怎么读