python - 在递归python函数中,代码行是如何到达的,它位于调用自身的代码行之后
问题描述
这是我从电脑爱好者制作的数独求解器视频中复制的代码:
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()
到达的?solve()
每次到达上面的行时,Python 不会回到函数的开头,即solve()
?
那么函数是如何solve()
运行的呢?
解决方案
在解决这个难题的某个地方,possible(x, y, n)
对于 for 循环的每个实例,答案都是错误的,在这种情况下,代码会跳转到for方法的return
语句。solve
在这个时候,程序运行grid[y][x] = 0
部分!
你可以在这里看到更多递归函数的例子。
推荐阅读
- javascript - React Bootstrap ButtonToolbar 不将按钮分开
- ios - 关于 Metal 中 alpha 的输出
- javascript - 创建基于 HTML 输入的计算器
- flutter - 上传竞争条件 - Google Firebase 存储
- wordpress - 帖子分页在首页不起作用
- git - IntelliJ: Git Push Messed Everything Up
- proxy - OWASP ZAP - 无法拦截 SOAP API 请求
- sql - 使用随机重复键值创建和删除模式违反唯一约束“pg_type_typname_nsp_index”
- javascript - Chrome 扩展后台脚本获取请求可以阻止客户端吗?
- php - 当网站在其他设备上正常工作时,我在浏览器上收到“ERR_SSL_UNRECOGNIZED_NAME_ALER”的原因可能是什么?