首页 > 解决方案 > 为什么在 Python 的这个递归函数中,即使满足基本条件,执行也会继续?

问题描述

以下是 Al Sweigart 的“使用 Python 和 Pygame 制作游戏”一书中名为 Ink Spill 的游戏的代码片段。(完整代码在这里:http: //invpy.com/inkspill.py

递归函数负责将旧颜色(在本例中为“2”,即 mainBoard[0][0])更改为新颜色(在本例中为“3”,即 mainBoard[1][0])玩家点击。

我的问题是:在这个例子中,为什么即使满足基本条件并执行返回,执行仍然会跳转到函数内的下一个块。

我已经在函数中多次使用打印语句和不同的参数以及在Visualize Code网站上对此进行了测试......我仍然不明白!

在这里,我已经删除了许多我的打印语句,并且在开始时只留下了两个。如果您运行此代码,您将在控制台上看到第三行满足条件 (3 !=2),但执行仍在继续!

我真的很感激任何帮助。非常感谢。

顺便说一句,不幸的是,其他人提出的另一个问题:为什么这个递归函数即使在它的基本情况得到满足后仍然继续没有回答我的问题,虽然非常相似!

boardWidth = 3
boardHeight = 3
mainBoard = [[2, 0, 0], [3, 0, 0], [4, 0, 0]]
# (blue, red, red),(yellow, red, red),(orange, red, red)


def floodFill(board, oldColor, newColor, x, y):
    print(board[x][y], oldColor)
    print(mainBoard)
    if board[x][y] != oldColor:
        return

    board[x][y] = newColor  # change the color of the current box

    # Make the recursive call for any neighboring boxes:
    if x > 0:
        floodFill(board, oldColor, newColor, x - 1, y)

    if x < boardWidth - 1:
        floodFill(board, oldColor, newColor, x + 1, y)

    if y > 0:
        floodFill(board, oldColor, newColor, x, y - 1)

    if y < boardHeight - 1:
        floodFill(board, oldColor, newColor, x, y + 1)


floodFill(mainBoard, 2, 3, 0, 0)

标签: python-3.xrecursion

解决方案


推荐阅读