1

我已经完成了一个迷宫寻路递归函数作为家庭作业,但我遇到了一个问题。我知道我已经正确地完成了所有事情(通过调试),正在找到路径等。但是当所有递归函数开始返回 True 时,原始/第一个不是!我找不到让它返回 true 的方法(递归调用采用“if, 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
4

1 回答 1

1

没有所有代码我错了,但我认为你需要一个全局/类 var 来存储返回值。逻辑:第一次调用不返回任何内容(或返回无),因为正在调用其他函数。
要清楚:

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)

如果您测试,您将看到 var = None,但 ret 为 1(而不是 global,我建议您将代码封装在一个类中并使用 self.ret 之类的东西)。

PS:正如 Joel Cornett 所说,使用英文/抽象 var 名称使所有代码更具可读性!

于 2013-02-27T22:43:44.033 回答