所以我解决了头脑中的一个脑电波,但是我很难把它转换成一个递归的定义。脑力问题是破碎重量问题(https://mathlesstraveled.com/2010/05/01/the-broken-weight-problem/):
一个商人有一个40磅的体重,由于一次跌落而摔成了四块。当这些碎片随后被称重时,发现每一件的重量是一个完整的磅数,这四块可以用来称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)此代码已中断,并将引发“赋值前引用的局部变量‘和’”错误。我怎么才能最好地想一想?
发布于 2016-07-19 21:41:26
我相信这就是你要找的代码:
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)混淆可能是旧的和新的金额/术语。
https://stackoverflow.com/questions/38468488
复制相似问题