任务描述
本关任务:树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数。 例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级,也可以第一次走两级,第二次走一级,一共3种方法。
相关知识
为了完成本关任务,你需要掌握:1.解题思路。
解题思路
-
首先,我们可以使用动态规划的思想来解决这个问题,假设楼梯有
n
级,那么有f(n)
种不同的走法。 -
我们可以把
f(n)
分解为f(n-1)和f(n-2)
,即最后一步可以走一级或者两级,所以f(n) = f(n-1) + f(n-2)
。 -
根据上面的分析,我们可以得到一个递推公式:
f(n) = f(n-1) + f(n-2)
,其中f(1) = 1,f(2) = 2
。 -
根据递推公式,我们可以从
f(1)
开始,一步步计算出f(n)
的值,从而得到不同的走法数。
编程要求
根据提示,在右侧编辑器补充代码,完成题目。
测试说明
平台会对你编写的代码进行测试:
测试输入:输入包含若干行,每行包含一个正整数N,代表楼梯级数,1≤N≤30
。 预期输出:不同的走法数,每一行输入对应一行输出。
测试输入:
5
8
10
预期输出:
8
34
89
递推代码:
#include <iostream>
using namespace std;
int climb(int n)
{
if(n==1){
return 1;
}
if(n==2){
return 2;
}
int i,f[n+1];
f[1]=1;
f[2]=2;
for(i=3;i<=n;i++){
f[i]=f[i-2]+f[i-1];
}
return f[n];
}
int main(){
int n;
while (cin>>n){
cout<<climb(n)<<endl;
}
return 0;
}
递归代码:
#include<iostream>
using namespace std;
int climb(int k){
if(k==1){
return 1;
}
else if(k==2){
return 2;
}
else{
return climb(k-1)+climb(k-2);
}
}
int main(){
int n;
while(cin>>n){
cout<<climb(n)<<endl;
}
return 0;
}