如何处理递归返回值?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
关键修改说明
- 递归传递结果:递归分支不再直接返回
connect_n(tiles, root, n-1),而是先获取n-1阶的骨牌集合prev_tiles - 迭代扩展骨牌:遍历
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
相关产品推荐
相关产品推荐

