繁体   English   中英

if语句后,递归不会停止执行

[英]Recursion won't stop executing after an if-statement

我有这个代码

def swap(a, i, j):
    a[i], a[j] = a[j], a[i]


def permute(a, i, n):
    if (a == b):
        print('String matched')
    else:
        if i == n:
            print(a)
        for j in range(i, n + 1):
            swap(a, i, j)
            permute(a, i + 1, n)
            swap(a, i, j)


def main():

    string = "ABCD"
    n = len(string)
    a = list(string)
    global b
    b = list("ABDC")
    permute(a, 0, n - 1)


if __name__ == '__main__':
    main()

我的目标是在字符串与字符串b匹配时停止循环,但程序输出为

['A', 'B', 'C', 'D']
String matched
['A', 'C', 'B', 'D']
['A', 'C', 'D', 'B']
['A', 'D', 'C', 'B']
['A', 'D', 'B', 'C']
['B', 'A', 'C', 'D']
['B', 'A', 'D', 'C']
['B', 'C', 'A', 'D']
['B', 'C', 'D', 'A']
['B', 'D', 'C', 'A']
['B', 'D', 'A', 'C']
['C', 'B', 'A', 'D']
['C', 'B', 'D', 'A']
['C', 'A', 'B', 'D']
['C', 'A', 'D', 'B']
['C', 'D', 'A', 'B']
['C', 'D', 'B', 'A']
['D', 'B', 'C', 'A']
['D', 'B', 'A', 'C']
['D', 'C', 'B', 'A']
['D', 'C', 'A', 'B']
['D', 'A', 'C', 'B']
['D', 'A', 'B', 'C']

Process finished with exit code 0

如我们所见,“匹配的字符串”正在替换匹配的字符串(这意味着if条件正在工作)。 我的问题是,此后循环仍然有效。

下一步:将if语句的return false 不幸的是输出仍然相同

有谁知道如何停止循环?

您可以添加其他变量。

例如:

def swap(a, i, j):
    a[i], a[j] = a[j], a[i]


def permute(a, i, n):
    if (a == b):
        global flag
        flag = True
        print('String matched')
    elif not flag:
        if i == n:
            print(a)
        for j in range(i, n + 1):
            swap(a, i, j)
            permute(a, i + 1, n)
            swap(a, i, j)


def main():

    string = "ABCD"
    n = len(string)
    a = list(string)
    global flag
    global b
    flag = False
    b = list("ABDC")
    permute(a, 0, n - 1)


if __name__ == '__main__':
    main()

因为您是递归调用permute()函数,所以先前再次调用该函数的调用仍在运行。 像上一个答案一样,使用全局布尔变量可能是最简单的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM