N阶楼梯,一次可以走两阶或一阶,问有多少种上楼方式。(要求采用非递归)
输入N(1<=N<90)
分析:
把N分别等于1、2、3……的答案排列为一个数列,需要求这个数列每一个数的值。
f(n)为台阶总数为n时的上台阶方式总数。
当数据较小,可知f(1)=1 f(2)=2
当n大于2时,我们考虑每种上台阶方式的最后一步,由于只有两种行走方式,因此它只可能是从n-1阶走一步到n阶,或者从n-2阶经过二步走到n阶。
达到n阶楼梯总的上楼方式个数为f(n-1)和f(n-2)的和。得出递推关系:f(n)=f(n-1)+f(n-2)
#include<stdio.h>
long long F[91];//此数组保存数列的每一个值
int main(){
F[1]=1;
F[2]=2;
for(int i=3;i<=90;i++){
F[i]=F[i-1]+F[i-2];
}
int n;
while(scanf("%d",&n)!=EOF){
printf("%lld\n",F[n]);
}
}