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

函数打印结果正确但返回None问题求助——六边形棋盘填充异常

问题分析与解决方案

你的函数返回None的核心原因是递归调用时没有传递返回值。当递归层级中找到符合条件的棋盘并返回结果时,上层函数只是执行了递归调用,却没有把这个结果返回出去,导致上层函数继续执行后续逻辑,最终因没有显式返回值而默认返回None。

具体问题点

看这段代码:

else:
    fill_board(board_copy_copy, size, stone_stones[1:], stone_index[1:])

这里调用递归函数后,没有将它的返回值return出去。即使深层递归找到了正确的棋盘并返回,上层函数也不会把这个结果传递回去,最终整个函数链会因为最上层没有收到有效返回值而返回None。

修复后的代码

需要修改递归调用的部分,将递归的返回值传递回来,同时处理递归未找到结果的情况(继续循环尝试其他位置):

def fill_board(board, size, stone_stones, stone_index):
    if len(stone_stones) > 0:
        board_copy = base.Board(size)
        make_board_copy(board, board_copy)

        for x in range(-size, size):
            for y in range(-size, size):
                board_copy_copy = base.Board(size)
                make_board_copy(board, board_copy_copy)
                counter = 0
                for cell in stone_stones[0]:
                    p, q = cell
                    if board_copy_copy.inBoard((p+x), (q+y)) and board_copy_copy.board[p+x][q+y] == 0:
                        counter += 1
                if counter == len(stone_stones[0]):
                    for cell in stone_stones[0]:
                        p, q = cell
                        board_copy_copy.board[p+x][q+y] = stone_index[0][0]
                    if is_board_filled_(board_copy_copy):
                        print('xd_done', board_copy_copy.board)
                        print(board_copy_copy.board)
                        board_return = board_copy_copy.board.copy()
                        return board_return
                    else:
                        # 接收递归返回结果,找到有效解则立即返回
                        result = fill_board(board_copy_copy, size, stone_stones[1:], stone_index[1:])
                        if result is not None:
                            return result
    else:
        print('xd', board.board, is_board_filled_(board))
        print(board.board)
        if is_board_filled_(board):
            board_return = board.board.copy()
            return board_return

修复说明

  1. 递归调用时,将结果赋值给result变量,判断如果result不为None(即找到有效解),则立即返回该结果,终止后续循环。
  2. 这样递归链中找到的有效结果会逐层向上传递,最终被最上层函数返回,不会丢失在递归调用中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 19:05:15