递归生成模式

时间:2015-09-21 13:33:48

标签: python recursion permutation

我试图在列表中生成所有排列。我知道这里有内置函数,但我想用递归函数自己做。我试图理解为什么我的尝试无效:

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

2 个答案:

答案 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