影响变量的递归函数

recursive function affecting variable

我有一个递归函数来计算 8 个皇后在 8x8 棋盘上不相交的方式的数量(对于 class)。它运作良好并提供正确的排列,当我让程序尝试计算答案的数量时,有趣的事情发生了 - 它不断 returns 我的计数器为零。当我手动计算排列时,它是 92(这是正确的)。

def can_be_extended_to_solution(perm):
    i = len(perm) - 1
    for j in range(i):
        if i - j == abs(perm[i] - perm[j]):
            return False
    return True

def extend(perm,count, n):
    if len(perm)==n:
        count=count+1
        print "cycle counter= ",count
        print(perm)

    for k in range(n):
        if k not in perm:
            perm.append(k)
            if can_be_extended_to_solution(perm): # if it works
                extend(perm, count, n)
            perm.pop()        

extend(perm = [], count=0, n = 8)

问题是您永远不允许递归调用修改 count 的值。您将 count 值传递给函数,但是当调用 count = count + 1 行时,它只会修改 countlocal 值该函数调用,并且不修改递归调用它的调用中的值。

以下修改工作正常(extend 的 return 值为 92)。

def can_be_extended_to_solution(perm):
    i = len(perm) - 1
    for j in range(i):
        if i - j == abs(perm[i] - perm[j]):
            return False
    return True


def extend(perm, count, n):
    if len(perm) == n:
        count = count + 1
        print("cycle counter= " + str(count))
        print(perm)

    for k in range(n):
        if k not in perm:
            perm.append(k)
            if can_be_extended_to_solution(perm): # if it works
                count = extend(perm, count, n)
            perm.pop()
    return count

print(extend(perm=[], count=0, n=8))