递归算法:爬楼梯问题

前提是你 提交于 2020-01-21 22:19:31

问题描述:

某人需要爬楼梯,他可以每次走1级或2级楼梯,输入楼梯的级数,求不同的走法数

例如:楼梯一共有3级,他可以每次都走1级;或者第一次走1级,第二次走2级;也可以第一次走2级,第二次走1级。一共有3种爬楼梯的方法。

输入:

输入包含若干行,每行包含一个正整数N,代表楼梯的级数,1<=N<=30

输出:

不同的走法数,每一行输入对应一行的输出

样例输入:

10 

样例输出:

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;
		}
		else
			cout << stairs(N) << endl;
	}
}

int stairs(int N)
{
	if (N == 1)
		return 1;
	else if (N == 2)
		return 2;
	else
		return (stairs(N - 1) + stairs(N - 2));
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!