You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现无限连分数近似自然常数e的递归函数问题排查

修正无限连分数近似自然常数e的递归实现

你的递归逻辑完全误解了连分数的数学结构,导致计算结果错误。连分数的核心规则是每一层都是1/(当前展开项 + 内层连分数的结果),以下是修正后的实现方案:

问题分析

你当前的fractionalSum函数分支逻辑混乱,没有正确体现连分数的嵌套结构:

  • inside函数的设计偏离了连分数的计算逻辑
  • number分支的判断(如number=2、number=88的硬编码)只是临时 workaround,无法扩展到任意层数

正确递归实现

以下代码严格遵循连分数的数学定义,支持任意层数(只要不超过Python默认递归深度,50层完全满足需求):

from fractions import Fraction

def continued_fraction(start, end, array):
    # 递归计算从start到end索引的连分数部分
    if start == end:
        return Fraction(1, array[start])
    # 核心逻辑:1/(当前项 + 内层连分数结果)
    return Fraction(1, array[start] + continued_fraction(start + 1, end, array))

# 生成e的连分数展开项:[1,2,1,1,4,1,1,6,...]
expansion = []
it = 1
# 生成110项(与原代码保持一致)
while len(expansion) < 110:
    expansion.extend([1, 2 * it, 1])
    it += 1
expansion = expansion[:110]

# 计算前50层的近似值(可替换为任意>50的数值)
layer_count = 50
e_approx = 2 + continued_fraction(0, layer_count - 1, expansion)

print(f"e的{layer_count}层连分数近似值:")
print(e_approx)
print("转为小数:", float(e_approx))

迭代版本(无递归深度限制)

如果需要支持超过1000层的极端场景,建议使用迭代实现(从最内层向外层计算):

from fractions import Fraction

def continued_fraction_iter(end_idx, array):
    # 从最后一项开始反向计算
    result = Fraction(1, array[end_idx])
    for i in range(end_idx - 1, -1, -1):
        result = Fraction(1, array[i] + result)
    return result

# 生成展开项(同上)
expansion = []
it = 1
while len(expansion) < 110:
    expansion.extend([1, 2 * it, 1])
    it += 1
expansion = expansion[:110]

layer_count = 100
e_approx = 2 + continued_fraction_iter(layer_count - 1, expansion)
print(f"e的{layer_count}层连分数近似值:")
print(float(e_approx))

验证正确性

你之前硬编码的number=88对应5层连分数计算,用修正后的代码验证:

print(2 + continued_fraction(0, 4, expansion))

会得到与硬编码逻辑完全一致的正确结果。

内容的提问来源于stack exchange,提问作者Daniel T. McGuiness

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 09:46:02