認爲,爲空列表,你的結果是空列表(這是你的「基本情況」),即
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