模式的递归生成
Recursive generation of pattern
我正在尝试生成列表中的所有排列。我知道有内置函数,但我想自己用递归函数来做。我想了解为什么我的尝试不起作用:
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
),但它仍在继续。我会 post 当前输出,但它又长又乱。预期输出为:
00
01
02
03
...
zx
zy
zz
for c in chars:
value += c
recurse(n-1, value)
此循环在每个递归级别运行 62 次,因此 value
将增长并增长到最大大小 124。要避免这种累积效应,请尝试:
for c in chars:
recurse(n-1, value+c)
它不会永远持续下去,它只适用于 2
递归,但你得到的输出不是你所期望的。这是因为行 -
value += c
这一行改变了变量值,所以当你遍历 char
时你会变大 value
并用这个更大的值递归,这是错误的,你不需要改变 value
变量,相反你可以做 -
def recurse(n, value):
if n > 0:
for c in chars:
recurse(n-1, value + c)
else:
print value
return
我正在尝试生成列表中的所有排列。我知道有内置函数,但我想自己用递归函数来做。我想了解为什么我的尝试不起作用:
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
),但它仍在继续。我会 post 当前输出,但它又长又乱。预期输出为:
00
01
02
03
...
zx
zy
zz
for c in chars:
value += c
recurse(n-1, value)
此循环在每个递归级别运行 62 次,因此 value
将增长并增长到最大大小 124。要避免这种累积效应,请尝试:
for c in chars:
recurse(n-1, value+c)
它不会永远持续下去,它只适用于 2
递归,但你得到的输出不是你所期望的。这是因为行 -
value += c
这一行改变了变量值,所以当你遍历 char
时你会变大 value
并用这个更大的值递归,这是错误的,你不需要改变 value
变量,相反你可以做 -
def recurse(n, value):
if n > 0:
for c in chars:
recurse(n-1, value + c)
else:
print value
return