python爬楼梯问题_用Python解决经典的爬楼梯问题

问题:一段楼梯共10级台阶,规定每一步只能跨一级或两级或三级。要等上第10级台阶共有几种走法?

思路:我们先从最后开始考虑,因为规定每一步只能跨一级或两级或三级,那么:

从第9级爬上去的可能性有1种; #跨一级:1

从第8级爬上去的可能性有2种; #连续跨一级或者跨两级:11,2

从第7级爬上去的可能性有4种; #穷举:111,12,21,3

然后用递归的思想,把楼梯共10级台阶替换成楼梯共9级台阶/楼梯共8级台阶/楼梯共7级台阶......

我们设爬n级台阶的解法总数为f(n),因为规定每一步只能跨一级或两级或三级,则f(n)=f(n-1)+f(n-2)+f(n-3)。

用穷举法求初始条件:

n=1时,f(n)=1;

n=2时,f(n)=2;

n=3时,f(n)=4;

n=4时,f(n-1)+f(n-2)+f(n-3)=f(n)=f(4)=f(3)+f(2)+f(1);

......

在Python中实现的代码为:

#函数体

def jumpFloor(a):

n = int(a) #很重要,输入的台阶数目取整

if n == 1:

return 1 #Python的return后可以加“;”或者省略

elif n == 2:

return 2

elif n == 3:

return 4

else:

z = jumpFloor(n-1)+jumpFloor(n-2)+jumpFloor(n-3)

return (z) #可以把变量替代省略,返回值里直接写成公式

n = input('Please give a number:')

print('The number of solutions is:', jumpFloor(n))

贴张图,看着顺心

欢迎补充和优化(比如变量取整型) :)

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值