这是一个非常简单的任务,我觉得我应该能够做到 - 但仅仅是为了我的生活,无法弄清楚.
我正在尝试编写一个递归函数来复制以下内容:
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)
如果您有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)
我不打算把它写出来,因为那样会达不到目的,但这里有一个提示:考虑一下停止递归的条件。这是关键点:
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 中获得此结果的最佳方法,但了解递归很有用。