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

递归实现Syracuse序列遇阻:求Python递归解法修正方案

修复考拉兹序列递归实现问题

你的代码存在三个核心问题,导致输出为嵌套列表而非预期的扁平序列:

  1. 无效的重复return语句:每个分支里return s之后的return syracus(...)永远不会被执行,属于冗余代码,直接删除即可。
  2. 列表嵌套问题:使用append()会把递归返回的整个列表作为单个元素插入当前列表,最终形成多层嵌套结构。应该用列表拼接运算符+,将当前列表与递归返回的列表元素合并。
  3. 浮点数隐患:Python3中N/2会返回浮点数(比如46/2=23.0),虽然不影响奇偶判断,但不符合正整数处理的逻辑,改用整数除法//能保证结果始终为整数。

修正后的代码

def syracus(N):
    s = [N]
    if N == 1:
        return s
    if N % 2 == 0:
        return s + syracus(N // 2)
    else:
        return s + syracus(3 * N + 1)

测试效果

调用syracus(15)会返回扁平的考拉兹序列:

[15, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1]

逻辑说明

  • 当输入N=1时,直接返回仅包含1的列表,作为递归终止条件。
  • 若N为偶数,返回当前列表[N]拼接上N//2对应的考拉兹序列。
  • 若N为奇数,返回当前列表[N]拼接上3*N+1对应的考拉兹序列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:52:43