您的位置:首页 > 编程语言 > Python开发

楼梯台阶

2016-07-19 00:00 232 查看
问题描述:

一个共有10个台阶的楼梯,从下面走到上面,一次只能迈一个台阶或两个台阶,并且不能后退,走完这个楼梯共有多少种方法。

我的代码:

def lt(n):
if n==1:
return 1
elif n==2:
return 2
else:
return lt(n-2)+lt(n-1)
print lt(10)


结果:

89

思路:

借鉴了这篇文章:http://www.lxway.com/522841804.htm

刚开始做的时候,想了传统的方法,可是想到最后觉得一昧求的话太麻烦了,而且太难实现了,网上搜了一下才知道这是典型的递归问题,整个人就豁然开朗了;而且这次不是从下向上递归,而是上往下递归的,即最后是一步上1个台阶的话,之前上了n-1个台阶,走法为f(n-1)种,而最后是一步上2个台阶的话,之前上了n-2个台阶,走法为f(n-2)种,故而f(n)=f(n-1)+f(n-2)

示例代码(修改后):

def fun(n):
res = fun.cache.get(n, None)
if res:
return res
res = []
for step in (1, 2):
if n < step: break
for p in fun(n - step):
res.append([step] + p)
fun.cache
= res
return res
fun.cache = {0:[[]]}
print len(fun(10))
print fun(10)


结果:

89
[[1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 2], [1, 1, 1, 1, 1, 1, 1, 2, 1], [1, 1, 1, 1, 1, 1, 2, 1, 1],

[1, 1, 1, 1, 1, 1, 2, 2], [1, 1, 1, 1, 1, 2, 1, 1, 1], [1, 1, 1, 1, 1, 2, 1, 2], [1, 1, 1, 1, 1, 2, 2, 1],

[1, 1, 1, 1, 2, 1, 1, 1, 1], [1, 1, 1, 1, 2, 1, 1, 2], [1, 1, 1, 1, 2, 1, 2, 1], [1, 1, 1, 1, 2, 2, 1, 1],

[1, 1, 1, 1, 2, 2, 2], [1, 1, 1, 2, 1, 1, 1, 1, 1], [1, 1, 1, 2, 1, 1, 1, 2], [1, 1, 1, 2, 1, 1, 2, 1],

[1, 1, 1, 2, 1, 2, 1, 1], [1, 1, 1, 2, 1, 2, 2], [1, 1, 1, 2, 2, 1, 1, 1], [1, 1, 1, 2, 2, 1, 2], [1, 1, 1, 2, 2, 2, 1],

[1, 1, 2, 1, 1, 1, 1, 1, 1], [1, 1, 2, 1, 1, 1, 1, 2], [1, 1, 2, 1, 1, 1, 2, 1], [1, 1, 2, 1, 1, 2, 1, 1],

[1, 1, 2, 1, 1, 2, 2], [1, 1, 2, 1, 2, 1, 1, 1], [1, 1, 2, 1, 2, 1, 2], [1, 1, 2, 1, 2, 2, 1], [1, 1, 2, 2, 1, 1, 1, 1],

[1, 1, 2, 2, 1, 1, 2], [1, 1, 2, 2, 1, 2, 1], [1, 1, 2, 2, 2, 1, 1], [1, 1, 2, 2, 2, 2], [1, 2, 1, 1, 1, 1, 1, 1, 1],

[1, 2, 1, 1, 1, 1, 1, 2], [1, 2, 1, 1, 1, 1, 2, 1], [1, 2, 1, 1, 1, 2, 1, 1], [1, 2, 1, 1, 1, 2, 2],

[1, 2, 1, 1, 2, 1, 1, 1], [1, 2, 1, 1, 2, 1, 2], [1, 2, 1, 1, 2, 2, 1], [1, 2, 1, 2, 1, 1, 1, 1], [1, 2, 1, 2, 1, 1, 2],

[1, 2, 1, 2, 1, 2, 1], [1, 2, 1, 2, 2, 1, 1], [1, 2, 1, 2, 2, 2], [1, 2, 2, 1, 1, 1, 1, 1], [1, 2, 2, 1, 1, 1, 2],

[1, 2, 2, 1, 1, 2, 1], [1, 2, 2, 1, 2, 1, 1], [1, 2, 2, 1, 2, 2], [1, 2, 2, 2, 1, 1, 1], [1, 2, 2, 2, 1, 2],

[1, 2, 2, 2, 2, 1], [2, 1, 1, 1, 1, 1, 1, 1, 1], [2, 1, 1, 1, 1, 1, 1, 2], [2, 1, 1, 1, 1, 1, 2, 1],

[2, 1, 1, 1, 1, 2, 1, 1], [2, 1, 1, 1, 1, 2, 2], [2, 1, 1, 1, 2, 1, 1, 1], [2, 1, 1, 1, 2, 1, 2], [2, 1, 1, 1, 2, 2, 1],

[2, 1, 1, 2, 1, 1, 1, 1], [2, 1, 1, 2, 1, 1, 2], [2, 1, 1, 2, 1, 2, 1], [2, 1, 1, 2, 2, 1, 1], [2, 1, 1, 2, 2, 2],

[2, 1, 2, 1, 1, 1, 1, 1], [2, 1, 2, 1, 1, 1, 2], [2, 1, 2, 1, 1, 2, 1], [2, 1, 2, 1, 2, 1, 1], [2, 1, 2, 1, 2, 2],

[2, 1, 2, 2, 1, 1, 1], [2, 1, 2, 2, 1, 2], [2, 1, 2, 2, 2, 1], [2, 2, 1, 1, 1, 1, 1, 1], [2, 2, 1, 1, 1, 1, 2],

[2, 2, 1, 1, 1, 2, 1], [2, 2, 1, 1, 2, 1, 1], [2, 2, 1, 1, 2, 2], [2, 2, 1, 2, 1, 1, 1], [2, 2, 1, 2, 1, 2],

[2, 2, 1, 2, 2, 1], [2, 2, 2, 1, 1, 1, 1], [2, 2, 2, 1, 1, 2], [2, 2, 2, 1, 2, 1], [2, 2, 2, 2, 1, 1], [2, 2, 2, 2, 2]]

问题出处:http://www.cheemoedu.com/exercise/29
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  楼梯台阶 Python