爬楼梯问题

OK,前段时间在一篇blog上看到一个关于楼梯的面试题,大概内容如下:

现有一个人,规定他上楼梯时只能一步走一个台阶或者两个台阶。要求:给定任意楼梯的阶数,求共有多少种方法爬完楼梯。

如果有经验可以看出,这是一道递归的题目。不过这个递归 程序怎么写呢?我的思路是可以这样想,不管他前面 怎么爬,最后总是要从N-2阶或者N-1阶 上来。当从N-2阶上来时,就有两种方法:1 1和 2(即一次一步和一次两步),当从N-1阶上来时就只有一种方式了。到这里代码应该不难了。我的实现如下:

#include <iostream>
void pa_lou_ti(unsigned int n,unsigned int *p){
	if(n<=2){
		if(n==1)
			*p+=1;
		if(n==2)
			*p+=2;
		return;
	}
	pa_lou_ti(n-1,p);
	pa_lou_ti(n-2,p);
}
int main(void){
	unsigned int a=0,*p=&a,n;
	std::cout<<"Input: ";
	std::cin>>n;
	pa_lou_ti(n,p);
	std::cout<<"Totaly "<<*p<<" Methods";
	return 0;
}

现在检测一下代码是否正确:输入5运行结果如下:


那实际上呢,对于5,我们可以列举一下:

1  1  1  1  1

1 1 1 2

1 2 1 1

1 1 2 1

1 1 1 2

2 2 1

2 2 1

2 1 2

穷举也是8种。

So Success!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值