认为,为空列表,你的结果是空列表(这是你的“基本情况”),即
f([]) == ""
对于任何非空列表,你把第一个列表中的每个字符元素(列表中的“头”),并在前面加上通过递归地施加你的函数,其余的名单(即“尾”)返回的每个字符串(这是你的“递归的情况下”):
f(['ABC'])
== 'A' + f([]), 'B' + f([]), 'C' + f([])
== 'A' + '', 'B' + '', 'C' + ''
== 'A', 'B', 'C'
f(['ABC', DEF'])
== 'A' + f(['DEF']), 'B' + f(['DEF']), 'C' + f(['DEF'])
== 'A' + 'D' + f([]), 'A' + 'E' + f([]), 'A' + 'F' + f([]), 'B' + 'D' + f([]) ...
== 'AD', 'AE', 'AF', 'BD', 'BE', 'BF', 'CD', 'CE', 'CF'
在Python中,可以表达为(效率低下和冗长,但重点在于显示t他的算法):
def f(xs):
if not xs:
yield ''
else:
head = xs[0]
tail = xs[1:]
for char in head:
yield char
for s in f(tail):
yield char + s
调用像
print list(f(['ABC', 'DEF', 'GHI']))
打印
['A', 'AD', 'ADG', 'ADG', 'ADH', 'ADH', 'ADI', 'ADI', 'AE', 'AEG', 'AEG', 'AEH', 'AEH', 'AEI', 'AEI', 'AF', 'AFG', 'AFG', 'AFH', 'AFH', 'AFI', 'AFI', 'B', 'BD', 'BDG', 'BDG', 'BDH', 'BDH', 'BDI', 'BDI', 'BE', 'BEG', 'BEG', 'BEH', 'BEH', 'BEI', 'BEI', 'BF', 'BFG', 'BFG', 'BFH', 'BFH', 'BFI', 'BFI', 'C', 'CD', 'CDG', 'CDG', 'CDH', 'CDH', 'CDI', 'CDI', 'CE', 'CEG', 'CEG', 'CEH', 'CEH', 'CEI', 'CEI', 'CF', 'CFG', 'CFG', 'CFH', 'CFH', 'CFI', 'CFI']
请添加你试过的东西。 –
你不需要为此递归 –
假设你已经给出了一个函数foo()来解决这个问题的大小为2的团体,你如何使用它? – Elazar