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

如何用Python 3实现无外部列表的递归式Collatz序列最大值求解?

无外部列表的递归实现Collatz序列最大值

问题背景

需要编写一个递归函数,接收整数n,返回对应的Collatz序列中的最大整数。当前实现依赖函数外部的列表,希望找到不使用外部存储的方案。

现有实现

collatz = []

def max_collatz(num):
    collatz.append(num)

    if num == 1:
        return max(collatz)
    else:
        return max_collatz(num / 2) if num%2 == 0 else max_collatz((3 * num) + 1)

解决方案

当然有办法,不需要依赖外部列表,核心是在递归过程中维护或比较最大值,以下是两种纯递归实现:

方法一:传递当前最大值参数

给函数增加一个可选参数记录当前序列的最大值,每次递归时更新这个值:

def max_collatz(num, current_max=None):
    # 首次调用时初始化最大值为输入的num
    if current_max is None:
        current_max = num
    
    # 更新当前最大值
    current_max = max(num, current_max)
    
    if num == 1:
        return current_max
    elif num % 2 == 0:
        return max_collatz(num // 2, current_max)  # 用整数除法避免浮点数问题
    else:
        return max_collatz(3 * num + 1, current_max)

方法二:利用递归返回值比较

不需要额外参数,每次递归调用后,将后续序列的最大值和当前数值对比,返回较大的那个:

def max_collatz(num):
    if num == 1:
        return 1
    next_num = num // 2 if num % 2 == 0 else 3 * num + 1
    next_sequence_max = max_collatz(next_num)
    return max(num, next_sequence_max)

注意:原代码中num / 2会生成浮点数,建议改用整数除法//,避免后续递归处理非整数的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 11:57:16