模式的递归生成

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