一个楼梯共有 n 级台阶,每次可以走一级或者两级,问从第 00 级台阶走到第 n 级台阶一共有多少种方案。
输入格式
共一行,包含一个整数 n。
输出格式
共一行,包含一个整数,表示方案数。
数据范围
1≤n≤15
输入样例:
5
输出样例:
8
解法一 递归解法
总的方法等于把最后上去的那一步或者两步之前的解法的和
比如 一共有15级 我们最后一下可以选择一步上去或者两步上去
总的情况就等于 前14级总的解法(最后一下一步上去) 加上前13级的解法 (最后一下两步上去)
n=1时有一种解法 n=2时有两种 作为递归结束的条件
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int f(int n)
{
if(n==1) return 1;
if(n==2) return 2;
else return f(n-1)+f(n-2);
}
int main()
{
int n;
cin>>n;
cout<<f(n);
return 0;
}
解法二 找规律 斐波那契数列
台阶/级 方案/种
1 1
2 2
3 3
4 5
5 8
6 13
熟悉吗 这不就tm斐波那契数列吗
代码就不出了 长得帅的都会写
解法三 也是递归解法 递归搜索树 深度优先
#include <bits/stdc++.h>
using namespace std;
int n;
int cmt=0;
void f(int k)
{
if(k==n) cmt++;
else if(k<n)
{
f(k+1);
f(k+2);
}
}
int main()
{
cin>>n;
f(0);
cout<<cmt<<endl;
return 0;
}