我试图在列表中生成所有排列。我知道这里有内置函数,但我想用递归函数自己做。我试图理解为什么我的尝试无效:
chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
def recurse(n, value):
if n > 0:
for c in chars:
value += c
recurse(n-1, value)
else:
print value
return
nchars = 2
recurse(nchars, '')
在我看来,我的递归应该在两次迭代(nchars = 2
)之后停止,但它会继续。我会发布当前的输出,但这是漫长而凌乱的方式。预期的产出将是:
00
01
02
03
...
zx
zy
zz
答案 0 :(得分:7)
for c in chars:
value += c
recurse(n-1, value)
此循环每个递归级别运行62次,因此value
将增长并增长到最大大小为124.为避免此累积效应,请尝试:
for c in chars:
recurse(n-1, value+c)
答案 1 :(得分:3)
它不会永远存在,它仅适用于2
递归,但您获得的输出不是您所期望的。这是因为行 -
value += c
这一行会更改变量值,因此当您迭代char
时,您会获得更大的value
并使用此更大的值递归,这是错误的,您无需更改{{1}变量,而你可以做 -
value