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

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


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

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

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


递推法class

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 +2di

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

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

递归公式也就出来了。

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

相关文章
相关标签/搜索