目录
题目描述
有 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))
加油!!!