简单的递归函数

tMC*_*tMC 4 python recursion

这是一个非常简单的任务,我觉得我应该能够做到 - 但仅仅是为了我的生活,无法弄清楚.

我正在尝试编写一个递归函数来复制以下内容:

chars = '0123456789abcdef'

for a in chars:
    for b in chars:
        for c in chars:
            for d in chars:
                print a+b+c+d
Run Code Online (Sandbox Code Playgroud)

寻找一个例子并没有证明是非常有成效的.

代码不起作用:

chars = 'ABCDEF'

def resu(chars, depth = len(chars)):
    for char in chars:
        if depth == 0:
           return char
        return char + resu(chars, depth - 1)

print resu(chars)
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 5

如果您有itertools以下情况,则不需要递归:

from itertools import product
for a,b,c,d in product('abc', repeat=4):
    print a+b+c+d
Run Code Online (Sandbox Code Playgroud)

  • 我认为递归在这里并不自然. (2认同)

nmi*_*els 4

我不打算把它写出来,因为那样会达不到目的,但这里有一个提示:考虑一下停止递归的条件。这是关键点:

for char in chars:
    return char + recurse(chars, depth - 1)
Run Code Online (Sandbox Code Playgroud)

编辑:这就是我忘记 Python 不是为这类事情而生的结果。它需要压平。

它不起作用的原因是最外层循环中的 return 将在第一次调用时结束整个过程。

在你的情况下你真正想做的更像是这样的:

def resu(chars, depth = None, prefix=''):
    if depth is None:
            depth = len(chars)
    if depth == 0:
            print prefix
            return
    for ch in chars:
            resu(chars, depth - 1, ch + prefix)
Run Code Online (Sandbox Code Playgroud)

请注意,即使是中等长度chars,这也会产生很多 ( n!) 行。正如已经指出的,这不是在 Python 中获得此结果的最佳方法,但了解递归很有用。