排列生成器代码中的条件和递归

时间:2018-11-29 20:40:39

标签: python recursion

def genperm(perm,n):
    if len(perm)==n:
3         print('output',perm)
          return
    for i in range(n):
          print('i',i)
7         if i not in perm:
                perm.append(i)
                print('appended',perm)
                genperm(perm,n)
11            print('to pop',perm)
                    perm.pop()
genperm([],2)O

所以我有这段代码可以不重复地输出排列。它有效,但我不知道如何。因此,我放置了一些不必要的打印件以查看它们是如何生成的。

在此示例中,n = 2是值(0,1),因此输出应为0,1和1,0。运行后,它会打印:

i 0 
appended [0]
i 0
i 1
appended [0, 1]
3  output [0, 1]
11 to pop [0, 1]
to pop [0]
i 1
appended [1]
i 0
appended [1, 0]
output [1, 0]
to pop [1, 0]
i 1
to pop [1]

所以,假设我们进入了perm = [0,1]的状态,因此第3行将其打印出来,但随后它跳到了第11行。我的问题是,如果到了这一点,它将如何进入第7行的条件,所以i的所有可能值都在烫发中,所以它是错误的。

1 个答案:

答案 0 :(得分:0)

它将在第10行进入递归函数。这意味着它会从头开始再次运行该函数。因此它是从第10行跳到第2行,而不是跳到第11行。它然后在第3行(perm=[0,1])和 returns 打印,从而在第10行结束了递归函数。因此,它继续前进到第11行,在弹出下一个i的第7行之前,它弹出1,这是对的。

相关问题