我知道还有其他人也有同样的问题。我已经读完了所有这些,但仍然有问题。在
以下是我的递归代码:def recurse(x, k, grid):
if x > 8:
for line in grid:
print line
raw_input()
if grid[x][k] == '0':
for number in '123456789':
if clear(number, x, k, grid):
grid[x] = grid[x][0:k] + number + grid[x][k+1:]
k += 1
if k > 8:
x += 1
k = 0
recurse(x, k, grid)
k -= 1
if k < 0:
x -= 1
k = 8
else:
k += 1
if k > 8:
x += 1
k = 0
recurse(x, k, grid)
基本上我把数独放在一个9x9槽的数组中,grid[x]访问整个数独的第x行,grid[x][k]访问第x行的第k个数字。在
上面有一个叫做“clear”的函数,它可以判断某个数字是否可以放入该插槽。我已经测试过很多次了,它工作正常。这里的问题是x值永远不会超过8,这意味着数独永远不会结束。在所有插槽都正确填充之前,递归停止。我在写递归方法方面很缺乏经验,所以请耐心等待。在
我想,如果一个数适合一个槽,那么这个数就放在那个槽里,然后k就递增了。如果k在8以上,那就意味着它是行尾,所以我们跳到下一行。然后再次调用递归函数。如果一个递归函数结束时不能再次调用它自己,那么这意味着没有数字适合这个槽,所以我们必须返回。在这种情况下,k递减。在
那么到底是什么问题?在