php 上楼梯问题 递归,楼梯问题之递归

核心算法

递推、回溯。

问题描述

爬楼梯问题,每次可以走1步或者2步,爬上n层楼梯的总方法。

(是不是你见过的最短的题目描述了,除了a+b)

解题思路

能进则进,不进则退。(回溯法八字真言)

解题步骤

输入n

设地面为第0层

利用递归求解

参数每次加1或加2

参数等于n,答案加1并返回

参数大于n,及时返回

直到模拟完所有可能

输出答案

递归图解

代码解析

#include

int n,ans = 0; //n楼梯总数 ans当前方案数

void dfs(int i) { //当前在第i层楼梯上

if(i == n){ //走到第n层

ans++;//方案数加1

return;//及时返回

}

if(i >n) { //超过n层

return;//及时返回

}

dfs(i+1);//走一层

dfs(i+2);//走两层

return;

}

int main() {

scanf("%d",&n);

dfs(0); //从地面开始走

printf("%d\n",ans);

return 0;

}

例题推荐

【洛谷 P1255】https://www.luogu.org/problemnew/lists?name=1255

思考

如果每次都可以爬1级、2级或3级,你会修改吗?

如果是每次可以选择m级呢?(m <= n)

上面给出的例题,按照递归算法只可以通过50%的数据,在下一篇文章里会为大家介绍更为高效的递推算法,你可以独立想出来递推公式吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值