题目的意思是有n个台阶,每次只能上1或2个台阶,求出总共有几种上台阶的方法。
分析:因为每次都只能+1或+2,最后的每一个n就是由1或2的组合组成。但是换一种思路, 我们对比一些斐波那契数列,1、2、3、5、8、、、、,即f(n)=f(n-1)+f(n-2)。如果第一步走了1个台阶,剩下的组合是f(n-1),如果第一步走2个台阶,则剩下的组合f(n-2),从而得到递推式f(n)=f(n-1)+f(n-2),所以,这个爬楼梯就是一个递归的斐波那契数列问题。
剩下的问题就是如何求出斐波那契数列的问题了,一开始我使用了递归,结果超时,只能用一个数组模拟数列了。整个实现的代码如下:
#include<stdio.h>
#include<stdlib.h>
int climbStairs(int n)
{
int a[1000];
a[1]=1,a[2]=2;
for(int i=3;i<1000;i++)
a[i]=a[i-1]+a[i-2];
return a[n];
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int len=climbStairs(n);
printf("%d\n",len);
}
return 0;
}