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

你可能感兴趣的:(算法,python,递归,猴子,递推,吃桃)