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

如何处理递归返回值?N阶多格骨牌生成器递归函数问题

N阶多格骨牌生成器递归问题修复

你的connect_n函数核心问题是递归逻辑没有传递每一步的生成结果——当前递归仅递减n值,但始终使用初始的tiles输入,没有把上一轮connect生成的骨牌组合作为下一轮的输入。

修正后的代码

def connect_n(tiles, root, n=1):
    # 统一输入格式:确保tiles是二维列表(每个元素为一个骨牌)
    if not isinstance(tiles[0], list):
        tiles = [tiles]
    
    # 基础情况:n=1时直接调用connect生成一阶扩展结果
    if n == 1:
        result = []
        for tile in tiles:
            result += connect(tile, root)
        return result
    
    # 递归逻辑:先生成n-1阶的所有骨牌,再基于这些骨牌生成n阶结果
    else:
        # 获取n-1阶的骨牌组合
        prev_tiles = connect_n(tiles, root, n-1)
        # 对每个n-1阶骨牌执行connect,收集所有n阶组合
        result = []
        for tile in prev_tiles:
            result += connect(tile, root)
        return result

关键修改说明

  1. 递归传递结果:递归分支不再直接返回connect_n(tiles, root, n-1),而是先获取n-1阶的骨牌集合prev_tiles
  2. 迭代扩展骨牌:遍历prev_tiles中的每个骨牌,调用connect生成更高一阶的组合,最终收集所有结果返回

验证示例

  • 当N=1时,调用connect_n([(0,0)], root, 1),会直接返回connect([(0,0)], root)的结果,与预期一致
  • 当N=2时,函数会先生成N=1的骨牌集合,再对每个骨牌执行connect,得到你给出的4种三阶骨牌组合

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:00:25