在递归代码中用 returns 替换 yield

Replacing yield with returns in recursive code

我如何删除此代码中的 yield 语句,并将其用作带有 return 语句的普通函数?

def solve(game_board):
   num_occupied, board_layout=game_board
   if num_occupied < 2:
     yield (None, game_board)
   else:
     for move in possible_moves():
       new_game_board = do_move(game_board, move)
       if new_game_board:
         for item in solve(new_game_board):
           solved_num_occupied, solved_game_board = item 
           yield (move, solved_num_occupied), solved_game_board

求解器适用于三角接龙游戏,有 15 个索引。 game_board 结构是一个元组,包含板上占用的空间数和一个包含 15 个元素的数组,包含 1 或 0,具体取决于那里是否有钉子。

我已尽最大努力将 (move, solved_num_occupied), solved_game_board 存储在一个数组中,并在 for 循环之一后对它们进行 return,但结果总是空的。我想我只是不太了解生成器的运行方式以及它的终止位置。任何帮助将不胜感激!

如果需要的话,这里是完整的代码(注意:我在把它放在这里之前更改了函数中的变量名以使其更容易理解):https://pastebin.com/raw/dEyLY2SH

一次积累所有东西 return,而不是一次产生一个。正如我在评论中所说,只需将每个 yield 调用替换为对 list.append 的调用即可。

def solve(game_board):
  # Initialise your list.
  moves = []
  num_occupied, board_layout=game_board
  if num_occupied < 2:
    # First change.
    moves.append((None, game_board))
  else:
    for move in possible_moves():
      new_game_board = do_move(game_board, move)
      if new_game_board:
        for item in solve(new_game_board):
          solved_num_occupied, solved_game_board = item 
          # Second change
          moves.append(((move, solved_num_occupied), solved_game_board))
  # Final change.
  return moves