【问题描述】
北武当山主峰四周几乎都是陡壁悬崖,只有一条人造“天梯”可攀,天梯由n级就山凿筑的石阶组成,欢欢打算通过天梯攀上北武当山主峰。
攀天梯时,他有时一步一级石阶,有时一步两级,那么,他攀上这n级的天梯有多少种不同的方法?
【输入格式】
一个整数n(1≤n≤80)。
【输出格式】
一个整数,表示欢欢攀上这n级天梯的方法数。
【输入样例】
5
【输出样例】
8
方法一 递归
#include <iostream>
using namespace std;
//栈
long long f(int n)
{
if(n==0 || n==1) return 1;
return f(n-2)+f(n-1);
}
int main( void )
{
int n;
cin>>n;
cout<<f(n)<<endl;
return 0;
}
方法二:记忆化搜索
#include <iostream>
using namespace std;
unsigned long long ans[100]={0};
unsigned long long f(int n)
{
//记忆化,若己计算,就不再计算
//记忆化搜索
if( ans[n] )
{
return ans[n];
}
if(n==0 || n==1) ans[n]=1;
else
{
ans[n]=f(n-2)+f(n-1);
}
return ans[n];
}
int main( void )
{
int n;
cin>>n;
cout<<f(n)<<endl;
return 0;
}
方法三 递推
#include <iostream>
using namespace std;
unsigned long long ans[10010]={0};
int main( void )
{
int n;
cin>>n;
ans[0]=ans[1]=1;
//递推 顺推
for(int i=2;i<=n;i++)
{
ans[i]=ans[i-1]+ans[i-2];
}
cout<<ans[n]<<endl;
return 0;
}
作业: 8选3 或 8选2
1204:爬楼梯
1.1.3编程基础之算术表达式与顺序执行(20题)
2.1.5 编程基础之循环控制_35求出e的值
3、1.5 编程基础之循环控制_42画矩形
4、1.4 编程基础之逻辑表达式与条件分支_18点和正方形的关系
5、2.3 基本算法之递归变递推
6、【算法1-4】递推与递归
7、1190:上台阶
8、1192:放苹果
9、1089:数字反转
1953:【11NOIP普及组】数字反转