如何递归地编程这个难题?

2024-04-25 10:23:17 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我解决了一个脑筋急转弯,但我很难把它转换成递归定义。脑筋急转弯的是断重问题(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’”错误。我该怎么想?在


Tags: the代码httpscomreturn定义碎片sum
1条回答
网友
1楼 · 发布于 2024-04-25 10:23:17

我相信这就是你要找的代码:

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]

示例:

^{pr2}$

混淆可能是旧的和新的金额/术语。在

相关问题 更多 >