Acwing 821跳台阶 递归搜索树 dfs

一个楼梯共有 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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值