题目的意思是有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; }
原文:http://blog.csdn.net/zyh920521/article/details/45174583