如何在python中递归表示无限嵌套的分数

时间:2019-02-18 22:58:40

标签: python

我是python的新手,并试图通过近似各种数学常量来提高对递归的理解。我发现了一个e(2.718 ...)的表达式,它的形式是无限嵌套的分数:2 + 2 /(2 + 3 /(3 + 4 /(4 + 5 / ...

请在以下地址查看图片:

https://wikimedia.org/api/rest_v1/media/math/render/svg/98e36faf34d05cb60882518818c7e6c9c7dca5e4

我想找到一种递归地近似该值的方法,但是对于编写该函数的返回行时,我从何处着迷。特殊的障碍是,当您沿着分数的层向下移动时,数字会变大,因此f(n-1)不能在n == 0的基本情况下用于返回行中。任何帮助或建议都会非常有用感谢!

3 个答案:

答案 0 :(得分:1)

这是一个持续的分数。请注意,无理数的连续小数在扩展中具有无限个数字。常用的方法是编写一个生成器,生成连续分数的数字。

请参阅闲聊的连续分数。至少还有一个Python模块可用于连续分数

答案 1 :(得分:1)

任何递归函数都需要一个停止条件,以便最终可以产生结果(即不会无限循环)。

以下是一个以迭代次数为停止条件的示例(您可以使用精度,时间或任何其他方案来使递归停止):

def neperian(n,d=1):
    if d == n : return n
    return max(2,d) + (d+1)/neperian(n,d+1)

print(neperian(10)) # 2.7182818427778273
print(neperian(20)) # 2.7182818284590455

该函数收敛非常快,因此在遇到大量问题之前,您将达到最大浮点精度。

答案 2 :(得分:0)

最后我想到了这个:

n = 10
def f(x):
    if x == n:
        return 1
    else:
        return x/(x + f(x + 1))

e = 2 + f(2)

我不确定这是否是在代码中传达e特定扩展的最简洁方法。任何建议,以完善它,将不胜感激!