首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何递归地编写这个谜题?

如何递归地编写这个谜题?
EN

Stack Overflow用户
提问于 2016-07-19 21:03:09
回答 1查看 215关注 0票数 0

所以我解决了头脑中的一个脑电波,但是我很难把它转换成一个递归的定义。脑力问题是破碎重量问题(https://mathlesstraveled.com/2010/05/01/the-broken-weight-problem/):

一个商人有一个40磅的体重,由于一次跌落而摔成了四块。当这些碎片随后被称重时,发现每一件的重量是一个完整的磅数,这四块可以用来称1到40磅之间的每一个整体重量。碎片的重量是多少?

因此,答案是( 1 ,3,9,27),可以概括为前一项+1之和的两倍。

我试图写一个python函数来递归地返回序列的第n个项,并且我遇到了困难,因为我还不太擅长递归。我想我也得还一笔钱.

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

代码语言:javascript
复制
def x(n):
  if n == 1:
    sum = term = 1 
      return (sum, term)
  else:
    term = (sum*2)+1
    sum = sum+term
    return (sum,term)

此代码已中断,并将引发“赋值前引用的局部变量‘和’”错误。我怎么才能最好地想一想?

EN

回答 1

Stack Overflow用户

发布于 2016-07-19 21:41:26

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

代码语言:javascript
复制
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]

示例:

代码语言:javascript
复制
>>> x(1)
(1, 1)
>>> x(2)
(4, 3)
>>> x(3)
(13, 9)
>>> x(4)
(40, 27)
>>> x(5)
(121, 81)

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38468488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档