所以我在头脑中解决了脑筋急转弯,但我很难将其翻译成递归定义。脑力激荡是重量问题(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'在转让前引用"错误。我怎么能最好地考虑这个?
答案 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)
混淆可能是旧的和新的金额/条款。