Python实现任意n值的Stern-Brocot Tree生成代码优化问题
Stern-Brocot Tree 通用n值适配方案
原有代码仅针对n=1、n=2的场景硬编码了插入逻辑,没有抽象出通用的构造规则,因此无法适配更大的n值。Stern-Brocot树的每一层迭代本质是在当前序列的每一对相邻分数中间,插入二者的中介分数(分子相加作为新分子,分母相加作为新分母),基于这个规则就能写出通用逻辑。
修改后的可支持任意非负整数n的代码如下:
def stern_brocot(n): # 初始化n=0对应的基础序列 seq = [(0, 1), (1, 1)] if n == 0: return seq # 迭代n次,每次生成对应层级的新序列 for _ in range(n): new_seq = [seq[0]] # 遍历所有相邻元素对,依次插入中介分数 for i in range(1, len(seq)): left = seq[i-1] right = seq[i] mediant = (left[0] + right[0], left[1] + right[1]) new_seq.append(mediant) new_seq.append(right) seq = new_seq return seq
验证结果完全匹配原有预期:
stern_brocot(0)=>[(0, 1), (1, 1)]stern_brocot(1)=>[(0, 1), (1, 2), (1, 1)]stern_brocot(2)=>[(0, 1), (1, 3), (1, 2), (2, 3), (1, 1)]- 可正常输出任意非负整数n对应的Stern-Brocot序列结果。
内容的提问来源于stack exchange,提问作者wenghei
相关产品推荐
相关产品推荐

