【问题标题】:Generator for an infinite recursive series无限递归序列的生成器
【发布时间】:2016-10-12 01:57:50
【问题描述】:

这是我要实现的公式:

给定xy,我们定义x+x^y并继续:... + (x**x**y)

即:下一项是前面2项堆积的指数。

所以我们得到:

x + [x**y] + [x**(x**y)] + [x**y]**[x**(x**y)] + ...

【问题讨论】:

  • 我有点困惑,你能详细说明一下吗?
  • 这有点像斐波那契发电机。在斐波那契中,您得到系列的前 2 个,然后第三个是总和等,这是相似的,但公式是第三个是第一个指数秒,依此类推(所有前面的都是指数)

标签: python python-3.x recursion generator


【解决方案1】:

正如您所指出的,由于这是一个无限级数,我们将把它实现为一个生成器,以便我们可以提取该级数的术语:

def series_generator(x, y):

    y = (x**y)

    while True:
        yield x

        x, y = y, (x**y)

generator = series_generator(2, 3)

print(sum(next(generator) for _ in range(3)))

输出

% python3 test.py
266

但是,这个系列的术语增长非常快,并且非常快需要很长时间来计算。此示例中要添加的下一个系列术语是:

1552518092300708935148979488462502555256886017116696611139052038026050952686376886330878408828646477950487730697131073206171580044114814391444287275041181139204454976020849905550265285631598444825262999193716468750892846853816057856 P>

并且计算下一个将需要很长时间,以至于永远不会返回。为了让自己相信这是你描述的那样,我做了一个象征性的版本:

def series_generator(x='x', y='y'):

    y = f"({x}**{y})"

    while True:
        yield str(x)

        x, y = y, f"({x}**{y})"

generator = series_generator(2, 3)

print(" + ".join(next(generator) for _ in range(4)))

谁的输出是:

2 + (2**3) + (2**(2**3)) + ((2**3)**(2**(2**3)))

或者,如果您省略 series_generator() 的参数:

x + (x**y) + (x**(x**y)) + ((x**y)**(x**(x**y)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-29
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    相关资源
    最近更新 更多