如何用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
相关产品推荐
相关产品推荐

