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的所有可能值都在烫发中,所以它是错误的。
答案 0 :(得分:0)
它将在第10行进入递归函数。这意味着它会从头开始再次运行该函数。因此它是从第10行跳到第2行,而不是跳到第11行。它然后在第3行(perm=[0,1]
)和 returns 打印,从而在第10行结束了递归函数。因此,它继续前进到第11行,在弹出下一个i
的第7行之前,它弹出1,这是对的。