python猴子吃桃是穷举法_Python算法题----孙悟空吃蟠桃

孙悟空第一天摘下若干蟠桃,当即吃了一半,还不过瘾,又多吃了一个。第二天早上,他又将剩下的蟠桃吃掉了一半,还不过瘾,又多吃了一个。之后每天早上都吃掉前一天剩下的桃子的一半零一个。到第十天早上再想吃时,就只剩下一个蟠桃了。求孙悟空第一天共摘了多少个蟠桃?

此题目利用递推的思想,倒推是一种很直观的做法。第十天是1个,根据题意后一天吃掉前一天的一半零一个。那第九天的蟠桃是第十天的一倍加1个再加上第十天的。 即:

x9 = 2 * x10 + 1 + x10 = 2 * x10 + 2 = 4

那好办了。有了这个2x+2的公式。我用一个循环代入,倒推到第一天就能知道第一天的蟠桃数了。

递推法

def eat01(n=10):

x = 1

while n > 1:  # 因为从10开始循环,第十天是1个桃,终止条件不能等1,否则就多算了1天

x = (2 * x + 2)

n -= 1

return x

这道题用递归的方法也能解决。

上面的公式我们可以表示为:

x(n-1) = 2 * xn +2

因为这是一个从大到小的递减数列,递归终止条件为10,算起来不方便。我们可以把数列逆序排列一下,公式可以变成这样:

xn = 2 * x(n-1) + 2

递归公式也就出来了。

x1 = 1 ;n = 1(递归终止条件)

xn = 2 * x(n-1) + 2

递归法

def eat02(n=10):

if n == 1:

return 1

else:

return eat02(n-1) * 2 + 2

答案:1534

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值