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!