递归实现Syracuse序列遇阻:求Python递归解法修正方案
修复考拉兹序列递归实现问题
你的代码存在三个核心问题,导致输出为嵌套列表而非预期的扁平序列:
- 无效的重复return语句:每个分支里
return s之后的return syracus(...)永远不会被执行,属于冗余代码,直接删除即可。 - 列表嵌套问题:使用
append()会把递归返回的整个列表作为单个元素插入当前列表,最终形成多层嵌套结构。应该用列表拼接运算符+,将当前列表与递归返回的列表元素合并。 - 浮点数隐患: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
相关产品推荐
相关产品推荐

