程序设计与算法3-2:上台阶问题

问题:

假设你正在爬楼梯。需要 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;
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值