函数打印结果正确但返回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
修复说明
- 递归调用时,将结果赋值给
result变量,判断如果result不为None(即找到有效解),则立即返回该结果,终止后续循环。 - 这样递归链中找到的有效结果会逐层向上传递,最终被最上层函数返回,不会丢失在递归调用中。
内容的提问来源于stack exchange,提问作者Nipisek371
相关产品推荐
相关产品推荐

