两种解法(都是递归)
方法一:斐波那契数列
1.从第0级到第1级:只能走一级,共1钟方案;
2.从第0级到第2级:可以一次走两级,也可以走两次,每次走一级,共1+1=2钟方案;
3.从第0级到第3级:可以先走两级再走一级,也可以先走一级再走两级,还可以走三次每次走一级,共1+2=3钟方案
4.从第0级到第4级:可以走四次一级,也可以走两次两级,还可以先走一次两级再走两次一级,还可以先走两次一级再走一次两级,还可以先走一次一级再走一次两级再走一次一级,共1+2+3=5钟方案
–>综上推理出,这就是斐波那契数列(从第2项开始)
#include<iostream>
using namespace std;
int f(int n)
{
if (n == 1) return 1;
if (n == 2) return 2;
return f(n - 1) + f(n - 2);
}
int main()
{
int n;
cin >> n;
cout << f(n) << endl;
return 0;
}
方法二:dfs暴搜
n的范围不大,直接dfs搜索也可以
#include<iostream>
using namespace std;
int n;
int ans;
void dfs(int u)
{
if (u == n)
{
ans++;
return;
}
if(u < n)
dfs(u + 1);
if(u < n - 1)
dfs(u + 2);
}
int main()
{
cin >> n;
dfs(0);
cout << ans << endl;
return 0;
}