问题:
描述
N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式。(要求采用非递归)
输入描述:
输入包括一个整数N,(1<=N<90)。
输出描述:
可能有多组测试数据,对于每组数据, 输出当楼梯阶数是N时的上楼方式个数。
示例1
输入:
4
输出:
5
答案:
略微思考可以发现,想要抵达目标台阶n;仅有两种方法,
1.从n-1阶进一步;
2.从n-2阶进两步。(为什么n-2阶不可以进两个一步,因为n-2阶处进一步就抵达了n-1阶(此为第一种情况))
可以得到
{
f[1]=1
f[2]=2
f[n]=f[n-1]+f[n-2]
}
那么根据动态规划递推求解,直接生成一个数组。
#include<iostream>
using namespace std;
long long answer[91];
void Initial(){
answer[1]=1;
answer[2]=2;
int i=3;
while(i<=90){
answer[i]=answer[i-1]+answer[i-2];
i++;
}
return;
}
int main(){
Initial();
int num;
while(cin>>num){
cout<<answer[num]<<endl;
}
return 0;
}