如何修正递归算法以正确计算第n个偶三角形数?
修正递归函数以正确计算第n个偶三角形数
你的递归函数逻辑存在核心问题:混淆了「目标要找的第n个偶三角形数的序号」和「当前检查的三角形数的序号」。原函数只是从输入的n对应的三角形数开始,返回第一个遇到的偶三角形数,但没有累计已找到的偶三角形数量,导致多个不同的n会返回同一个结果。
修正方案:带计数状态的递归实现
我们需要在递归过程中跟踪两个状态:当前检查的三角形数序号,以及已经找到的偶三角形数的数量。可以用内部辅助函数来维护这两个状态:
def even_triangle(n): def helper(current_k, found_count): # 计算第current_k个三角形数 triangle = current_k * (current_k + 1) // 2 if triangle % 2 == 0: if found_count == n: return triangle # 找到一个偶三角形数,计数+1,继续查找下一个 return helper(current_k + 1, found_count + 1) # 当前是奇数三角形数,直接检查下一个,计数不变 return helper(current_k + 1, found_count) # 从第1个三角形数开始查找,初始已找到数量为0 return helper(1, 0) # 测试输出 for i in range(1, 12): print(f"{i})", even_triangle(i))
逻辑说明
- 内部
helper函数负责递归查找:current_k:当前正在检查的三角形数的序号found_count:已经找到的偶三角形数的数量
- 每次计算第
current_k个三角形数:- 如果是偶数,判断是否已经找到了第
n个(found_count == n),满足则返回该值;否则计数加1,继续检查下一个三角形数 - 如果是奇数,直接跳过,检查下一个三角形数,计数保持不变
- 如果是偶数,判断是否已经找到了第
- 初始调用从第1个三角形数开始,已找到数量为0,逐步累加直到找到第
n个偶三角形数
运行上述代码,输出将完全匹配你的预期结果。
内容的提问来源于stack exchange,提问作者landee
相关产品推荐
相关产品推荐

