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

如何修正递归算法以正确计算第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))

逻辑说明

  1. 内部helper函数负责递归查找:
    • current_k:当前正在检查的三角形数的序号
    • found_count:已经找到的偶三角形数的数量
  2. 每次计算第current_k个三角形数:
    • 如果是偶数,判断是否已经找到了第n个(found_count == n),满足则返回该值;否则计数加1,继续检查下一个三角形数
    • 如果是奇数,直接跳过,检查下一个三角形数,计数保持不变
  3. 初始调用从第1个三角形数开始,已找到数量为0,逐步累加直到找到第n个偶三角形数

运行上述代码,输出将完全匹配你的预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 14:05:13