В рекурсивной функции python как достигается строка кода, которая идет после строки кода, которая вызывает себя - PullRequest
2 голосов
/ 19 февраля 2020

это мой код, который я скопировал с видеофайла sudoku solver video:

grid = [ [4, 0, 0, 0, 0, 5, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 9, 8],
[3, 0, 0, 0, 8, 2, 4, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 8, 0], 
[9, 0, 3, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 3, 0, 6, 7, 0], 
[0, 5, 0, 0, 0, 9, 0, 0, 0], 
[0, 0, 0, 2, 0, 0, 9, 0, 7], 
[6, 4, 0, 3, 0, 0, 0, 0, 0], ]

def possible(x, y, n):
    for i in range(0, 9):
        if grid[i][x] == n and i != y:
            return False
    for i in range(0, 9):
        if grid[y][i] == n and i != x:
            return False            
    x0 = (x // 3) * 3
    y0 = (y // 3) * 3
    for X in range(x0, x0 + 3):
        for Y in range(y0, y0 + 3):
            if grid[Y][X] == n:
                return False    
    return True


def Print(matrix):
    for i in range(9):
        print(matrix[i])


def solve():
    global grid
    for y in range(9):
        for x in range(9):
            if grid[y][x] == 0:
                for n in range(1, 10):
                    if possible(x, y, n):
                        grid[y][x] = n
                        solve()
                        grid[y][x] = 0
                return
    Print(grid)
    input("")

solve()

Я хочу знать, как достигается grid[y][x] = 0, расположенный внутри функции solve()? Не будет ли Python go возвращаться к началу функции solve() каждый раз, когда она достигает указанной выше строки, а именно solve()?

Так как же работает функция solve()?

1 Ответ

1 голос
/ 19 февраля 2020

где-то при решении головоломки ответ на possible(x, y, n) будет ложным для каждого экземпляра for-l oop, в этом случае код переходит на оператор return для метода solve. в это время программа запускает grid[y][x] = 0 part!

, вы можете увидеть больше примеров рекурсивных функций здесь .

...