Python 递归函数中的For循环?

Python 递归函数中的For循环?,python,for-loop,recursion,Python,For Loop,Recursion,当for循环运行时,为什么它打印ABC的所有排列而不是所有的A def perm(l, n, str_a): if len(str_a) == n: print str_a else: for c in l: perm(l, n, str_a+c) perm("ABC", 3, "") 印刷品: AAA AAB AAC ABA ABB ABC ACA ACB ACC BAA BAB BAC BBA BBB BBC BC

当for循环运行时,为什么它打印ABC的所有排列而不是所有的A

def perm(l, n, str_a):
    if len(str_a) == n:
        print str_a
    else:
        for c in l:
            perm(l, n, str_a+c)


perm("ABC", 3, "")
印刷品:

AAA AAB AAC ABA ABB ABC ACA ACB ACC BAA BAB BAC BBA BBB BBC BCA BCB...

它不会一直打印“A”,因为在3次递归之后,它将形成字符串“AAA”。 然后,将执行行
print stru_a
,因为将验证条件
len(str_a)==n

之后,执行将返回被调用函数,该函数位于
c
循环中<代码>c的值为“A”。在接下来的迭代中,
c
将获得值“B”,并调用
perm(“ABC”,3,“AAB”)
,打印“AAB”,以此类推

也许递归图可以把事情弄清楚(它不完整,因为它很大)

  • 当您调用
    perm(“ABC”,3,”)
    时,执行
    else
    子句(因为
    len(“”)=3
  • 这导致调用
    perm(“ABC”,3,“A”)
    perm(“ABC”,3,“B”)
    perm(“ABC”,3,“C”)
    。让我们看看第一个会发生什么:
  • 同样,执行
    else
    ,导致函数调用
    perm(“ABC”,3,“AA”)
    perm(“ABC”,3,“AB”)
    perm(“ABC”,3,“AC”)
  • 第2步中的其他函数调用也会发生同样的情况(您知道了)
  • 让我们看看
    perm(“ABC”,3,“AA”)
    :调用
    else
    时,会再次执行-->
    perm(“ABC”,3,“AAA”)
    perm(“ABC”,3,“AAB”)
    perm(“ABC,3,“AAC”)
  • 在这些调用中,表达式
    len(stru a)
    最后是
    ==3
    ,这意味着将打印
    stru a
  • 依此类推,直到
    CCC

  • 我不知道你想做什么,但也许一点调试输出可以帮助你解决这个问题。试试这个:

    def perm(iter, l, n, str_a):
        print "starting iteration {0}: l='{1}', n='{2}', str_a='{3}'".format(
            iter, l, n, str_a)
        if len(str_a) == n:
            print str_a
        else:
           for c in l:
               perm(iter+1, l, n, str_a+c)
    
    perm(1, "ABC", 3, "")
    

    你能发布你的预期输出吗?哇。。。下次请再清楚一点。我花了5分钟才明白你的要求。你有一个有效的代码,但你不明白为什么。下次请把这一点说清楚。很抱歉你发现我的问题模棱两可。我已按要求更新了输出。这确实为我澄清了这一点。我现在明白了排列是如何产生的。非常感谢。非常感谢你的帮助,这个图表非常有用。以后我会尽量把我的问题弄清楚。