上台阶问题(递归练习,思路+代码详解)python实现

目录

题目描述

输入格式

输出格式

输入输出样例

 题目分析:

解题思路:

代码实列:


题目描述

有 N 级台阶,你一开始在底部,每次可以向上迈 1级或者2级台阶,问到达第 N 级台阶有多少种不同方式。

输入格式

一个正整数 N。

输出格式

一个正整数 ans(mod100003),为到达第 N 级台阶的不同方式数。

输入输出样例

输入 #1复制

5

输出 #1复制

8

 题目分析:

主要有两点:

1.需要上n阶台阶,可以一次上两阶台阶,也可以一次上一阶台阶

2.当n=0时只有一种方式,当n等于1时由两种方式

解题思路:

首先使用递归的方法要先确定一个递归终止点,由题目分析当n==0时,ways(0)==1,当n==1时,ways(1)==1,ways(n)代表上n阶台阶可以采取的方式。这道题采用逆向思维比较容易理解,不过我们还是要说一下正向思维

正向来看:当我们走第一步的时候有两种选择,上1阶或者上2阶,此时问题就变成了上(n-1)阶或着(n-2)阶台阶有几种方式,与原问题形式相同,只是规模变小了。ways(n)=ways(n-1)+ways(n-2),因为最后上到第n阶时要么从第(n-2)阶上去的,要么从第(n-1)阶上去的,经过多次递归最后回到ways(2)=ways(0)+ways(1)因为ways(0)==1,ways(1)==1,所以可以计算在经过一次次返回便可求出最后的结果。(正向思维不理解没关系,反向思维比较直观)

反向来看:我们用一个图来表示:从第n阶一步步倒推,是不是清晰明了

 对这张图进行解析:我们把上台阶看作下台阶,每一步都有两种选择(下1阶或者2阶),所以形成一个不断分叉的树(我没画到底,因为我把终止点直接相加了),以5阶为例,最底层应该有8个上1阶或者上2阶的终止点,每个终止点代表一种方式。

代码实列:

def ways(n):
    if n==0 or n==1:#设置终止点
        return 1
    return ways(n-1)+ways(n-2)
n=int(input())#输入台阶数
print(ways(n))

加油!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值