码迷,mamicode.com
首页 > 编程语言 > 详细

Python算法题----孙悟空吃蟠桃

时间:2016-01-20 15:58:07      阅读:892      评论:0      收藏:0      [点我收藏+]

标签: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

本文出自 “烛影摇红” 博客,请务必保留此出处http://gccmx.blog.51cto.com/479381/1736696

Python算法题----孙悟空吃蟠桃

标签:python 算法 递归 递推 猴子 吃桃

原文地址:http://gccmx.blog.51cto.com/479381/1736696

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!