孫悟空第一天摘下若干蟠桃,立即吃了一半,還不過癮,又多吃了一個。次日早上,他又將剩下的蟠桃吃掉了一半,還不過癮,又多吃了一個。以後天天早上都吃掉前一天剩下的桃子的一半零一個。到第十天早上再想吃時,就只剩下一個蟠桃了。求孫悟空第一天共摘了多少個蟠桃?
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