递归算法:爬楼梯问题
问题描述:
多功能电热锅某⼈需要爬楼梯,他可以每次⾛1级或2级楼梯,输⼊楼梯的级数,求不同的⾛法数
鸡蛋西红柿汤面例如:楼梯⼀共有3级,他可以每次都⾛1级;或者第⼀次⾛1级,第⼆次⾛2级;也可以第⼀次⾛2级,第⼆次⾛1级。⼀共有3种爬楼梯的⽅法。
输⼊:
输⼊包含若⼲⾏,每⾏包含⼀个正整数N,代表楼梯的级数,1<=N<=30
输出:
不同的⾛法数,每⼀⾏输⼊对应⼀⾏的输出
样例输⼊:
5
8
10
样例输出:
8
生产经理岗位职责
34
89
问题的分析及解决:
这题是⼀道递归的算法题。题⽬的核⼼难点只有⼀个,如何⽤递归思想去解决看似是排列组合的问题。
假设有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()
{
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
return (stairs(N - 1) + stairs(N - 2));
规划书怎么写
}世界足球排名