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

递归质因数分解函数输出嵌套列表问题求助

解决递归质因数分解的嵌套列表问题

你的问题出在递归函数的逻辑设计上——你既在修改共享的列表r,又把这个列表本身作为返回值追加到了r里,这就导致了自引用的嵌套结构(也就是你看到的[...])。咱们一步步拆解问题,再给出修复方案:

问题根源分析

看你原来的代码片段:

r.append(getPrimeFactor(z[0],r))
r.append(getPrimeFactor(z[1],r))
return r

这里的问题有两个:

  1. getPrimeFactor(z[0], r)已经会把z[0]的质因数添加到r里了,你却又把这个函数的返回值(也就是r本身)追加到了r中,相当于把列表自己塞了进去,自然会出现嵌套和自引用。
  2. 每次递归都返回同一个r对象,导致多次追加后,列表里充满了对自身的引用。

修复方案1:让递归返回质因数列表(更简洁)

重构函数逻辑,让递归函数直接返回当前数的质因数列表,通过列表拼接合并子问题的结果,不需要共享外部列表:

def getPrimeFactor(x):
    x = int(x)
    if is_Prime(x):
        return [x]
    # 获取最小的因数对
    z = getLowestFactors(x)
    # 合并两个子数的质因数列表
    return getPrimeFactor(z[0]) + getPrimeFactor(z[1])

# 调用示例
print(getPrimeFactor(3242))  # 输出 [2, 1621]
print(getPrimeFactor(48))    # 输出 [2, 2, 2, 2, 3]

修复方案2:保留辅助列表(避免多次列表拼接)

如果你想继续用共享列表的方式优化性能(减少列表拼接的开销),只需要去掉对递归返回值的追加操作,让递归函数专注于把质因数添加到列表中即可:

def getPrimeFactorHelper(x):
    r = []
    getPrimeFactor(x, r)
    return r

def getPrimeFactor(x, r):
    x = int(x)
    if is_Prime(x):
        r.append(x)
        return  # 不需要返回r,已经修改了传入的列表
    z = getLowestFactors(x)
    # 直接递归处理两个子因数,结果会自动添加到r里
    getPrimeFactor(z[0], r)
    getPrimeFactor(z[1], r)

# 调用示例
print(getPrimeFactorHelper(3242))  # 输出 [2, 1621]
print(getPrimeFactorHelper(48))    # 输出 [2, 2, 2, 2, 3]

这两种方案都能解决你遇到的嵌套列表问题,输出干净的质因数列表。

内容的提问来源于stack exchange,提问作者Shadows

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:58:56