如何递归编程这个难题?

时间:2016-07-19 21:03:10

标签: python logic puzzle

所以我在头脑中解决了脑筋急转弯,但我很难将其翻译成递归定义。脑力激荡是重量问题(https://mathlesstraveled.com/2010/05/01/the-broken-weight-problem/):

一位商人有一个四十磅的测量重量,由于摔倒而分成四块。当随后称重碎片时,发现每个碎片的重量是整数磅,并且这四个碎片可用于称重1至40磅之间的每个整体重量。这些碎片的重量是多少?

所以,答案是(1,3,9,27),它可以概括为先前术语总和的两倍+ 1。

我试图编写一个python函数来递归返回序列的第n个项,并且我有一个困难的时间,因为我还没有那么好的递归。我有点想知道我还要退还运行金额......

到目前为止,这是我的思维过程的不完整代码:

def x(n):
  if n == 1:
    sum = term = 1 
      return (sum, term)
  else:
    term = (sum*2)+1
    sum = sum+term
    return (sum,term)

此代码已损坏,会引发一个"本地变量' sum'在转让前引用"错误。我怎么能最好地考虑这个?

1 个答案:

答案 0 :(得分:0)

我相信这是您正在寻找的代码:

def _x(n):
    if n <= 1:
        return (1,1)
    else:
        oldsum, oldterm = _x(n-1)
        newterm = 2*oldsum + 1
        newsum = oldsum+newterm
        return (newsum, newterm)

def x(n):
    return _x(n)[1]

示例:

>>> x(1)
(1, 1)
>>> x(2)
(4, 3)
>>> x(3)
(13, 9)
>>> x(4)
(40, 27)
>>> x(5)
(121, 81)

混淆可能是旧的和新的金额/条款。