Python - 无法“结束”递归函数

1 投票
1 回答
1172 浏览
提问于 2025-04-17 17:22

我做了一个迷宫路径寻找的递归函数作为作业,但遇到了一个问题。我知道我做的一切都是正确的(通过调试确认的),路径也找到了等等。但是当所有的递归函数开始返回真值(True)时,最开始的那个却没有返回真值!我找不到办法让它返回真值(递归调用是以“如果,真”的格式进行的)。

我希望你们能帮我,抱歉我的英语不好,因为这不是我的母语。

*以下是代码:

def pathExists(labyrinth, currCoord, destination, previousRule, visited):
    if currCoord == destination:
        return True
    if currCoord not in labyrinth:
        print "False"
        return False

    rule = labyrinth[currCoord]
    if rule == Any:
        previousRule = rule
        print currCoord
        if (pathExists(labyrinth, (currCoord[0], currCoord[1] - 1), destination, rule, visited) or
            pathExists(labyrinth, (currCoord[0] + 1, currCoord[1]), destination, rule, visited) or
            pathExists(labyrinth, (currCoord[0] - 1, currCoord[1]), destination, rule, visited) or
            pathExists(labyrinth, (currCoord[0], currCoord[1] + 1), destination, rule, visited)):
            print "True"
            return True
        else:
            print"outro"

    elif rule == Bridge:
        print currCoord
        currCoord = nextCoord(currCoord, previousRule)
        if pathExists(labyrinth, currCoord, destination, rule, visited):
            print "True"
            return True

    else:
        print currCoord
        if currCoord in visited:
                print "False"
                return False
        visited.append(currCoord)
        previousRule = rule
        currCoord = nextCoord(currCoord, rule)
        if pathExists(labyrinth, currCoord, destination, rule, visited):
            print "True"
            return True

1 个回答

0

虽然我没有看到所有的代码,可能会有误,但我觉得你需要一个全局变量或者类变量来存储返回值。逻辑是:第一次调用的时候不会返回任何东西(或者返回None),因为它在调用其他函数。
为了更清楚:

a = [1,2,[4,6],3,4]
ret = None
def f(x):
    global ret
    if isinstance(x, list):
        f(x[0])
    else:
        ret = x
        return x

var = f(a)
print(var, ret)

如果你测试一下,你会发现变量的值是None,但ret的值是1(我建议你不要用全局变量,而是把代码放在一个类里,使用类似self.ret的方式)。

附注:正如Joel Cornett所说,使用英文或抽象的变量名会让代码更容易阅读!

撰写回答