python中的递归和返回值

时间:2013-10-13 13:13:33

标签: python recursion

a="003020600900305001001806400008102900700000008006708200002609500800203009005010300"
b=[]
def same_row(i,j): return (i/9 == j/9)
def same_col(i,j): return (i-j) % 9 == 0
def same_block(i,j): return (i/27 == j/27 and i%9/3 == j%9/3)
def r(a):
  i = a.find('0')
  if i == -1:
      b.append(a)
      return a

  excluded_numbers = set()
  for j in range(81):
    if same_row(i,j) or same_col(i,j) or same_block(i,j):
      excluded_numbers.add(a[j])

  for m in '123456789':
    if m not in excluded_numbers:
      return r(a[:i]+m+a[i+1:])


print r(a),b

这是一个数独求解器。它输入一个81大小的字符串,其中包含0和1-9个数字,并返回不带0的字符串。给定的示例输入一个字符串a,它应该返回结果字符串。您可以通过exit(a)代替return ab.append(a)

来验证函数是否返回结果

当尝试打印递归函数r返回的结果时,它什么都不返回。尽管事实上我用b填充b.append(a)表,但它会打印一个空表。

1 个答案:

答案 0 :(得分:3)

您需要return递归调用r

的值