- 注册时间
- 2017-12-26
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 2832
- 在线时间
- 小时
|
楼主 |
发表于 2019-3-25 12:58:27
|
显示全部楼层
python3.6程序
# coding = UTF-8
#题目:一栋楼有N阶楼梯,兔子每次可以跳1、3或5阶,问一共有多少种走法?
#对应1,2,3阶楼梯的方法数#比如n=5,1+1+1+1+1=1+3+1=1+1+3=3+1+1=5=5,共有5种不同的方法
#n=4,1+1+1+1=1+3=3+1=4,共有3种不同的方法
#n=3,1+1+1=3=3,共有2种不同的方法
#n=2,1+1=2,共有1种不同的方法
#n=1,1=1,共有1种不同的方法
#递归法
def climbStairs1(stairs):
'''
:param stairs:the numbers of stair
:return:
'''
if isinstance(stairs,int) and stairs > 0:
basic_num = {0:1,1:1,2:1,3:2,4:3,5:5}
if stairs in basic_num.keys():
return basic_num[stairs]
else:
return climbStairs1(stairs-1) + climbStairs1(stairs-3)+ climbStairs1(stairs-5)
else:
print( 'the num of stair is wrong')
return False
#递推法
def climbStairs2(stairs):
'''递推实现
:param stairs: the amount of stair
:return:
'''
if isinstance(stairs,int) and stairs > 0:
h1=1#对应1,2,3, 4, 5阶楼梯的方法数
h2=1
h3=2
h4=3
h5=5
n=5
basic_num = {1:1,2:1,3:2,4:3,5:5}
if stairs in basic_num.keys():
return basic_num[stairs]
else:
for i in range(stairs-n):
temp =h1
h1 = h2
h2 = h3
h3 =h4
h4=h5
h5 =temp+h2+h4
return h5
else:
print ('the num of stair is wrong')
return False
for j in range(1,20):
print ('递归法求得爬%d阶楼梯的方法数%d'%(j,climbStairs1(j)))#12阶楼梯
print ('递推法求得爬%d阶楼梯的方法数%d'%(j,climbStairs2(j)))
========
递归法求得爬1阶楼梯的方法数1
递推法求得爬1阶楼梯的方法数1
递归法求得爬2阶楼梯的方法数1
递推法求得爬2阶楼梯的方法数1
递归法求得爬3阶楼梯的方法数2
递推法求得爬3阶楼梯的方法数2
递归法求得爬4阶楼梯的方法数3
递推法求得爬4阶楼梯的方法数3
递归法求得爬5阶楼梯的方法数5
递推法求得爬5阶楼梯的方法数5
递归法求得爬6阶楼梯的方法数8
递推法求得爬6阶楼梯的方法数8
递归法求得爬7阶楼梯的方法数12
递推法求得爬7阶楼梯的方法数12
递归法求得爬8阶楼梯的方法数19
递推法求得爬8阶楼梯的方法数19
递归法求得爬9阶楼梯的方法数30
递推法求得爬9阶楼梯的方法数30
递归法求得爬10阶楼梯的方法数47
递推法求得爬10阶楼梯的方法数47
递归法求得爬11阶楼梯的方法数74
递推法求得爬11阶楼梯的方法数74
递归法求得爬12阶楼梯的方法数116
递推法求得爬12阶楼梯的方法数116
递归法求得爬13阶楼梯的方法数182
递推法求得爬13阶楼梯的方法数182
递归法求得爬14阶楼梯的方法数286
递推法求得爬14阶楼梯的方法数286
递归法求得爬15阶楼梯的方法数449
递推法求得爬15阶楼梯的方法数449
递归法求得爬16阶楼梯的方法数705
递推法求得爬16阶楼梯的方法数705
递归法求得爬17阶楼梯的方法数1107
递推法求得爬17阶楼梯的方法数1107
递归法求得爬18阶楼梯的方法数1738
递推法求得爬18阶楼梯的方法数1738
递归法求得爬19阶楼梯的方法数2729
递推法求得爬19阶楼梯的方法数2729 |
|