[英]Python - Recursive anagram function
我正在做家庭作業,有點困,請幫忙一下。
我不想把答案交給我,但是如果我能得到幫助或提示,我將不勝感激。
我必須創建一個字謎生成器,它只進行1個遞歸函數調用,而沒有for循環。
def anagram(st):
if len(st) == 0:
return []
else:
if len(st) > 1:
print(st)
return [st] + [st[0]] + anagram(st[1:])
else:
print("test2",st)
return [st[1:] + st[0]]
ana = anagram('abc')
這是我的結果:['abc','a','bc','b','c'] 5
答案應該是:['abc','acb','bac','bca','cab','cba'] 6
讓我們考慮一下沒有代碼,從一般情況開始。 假設您已經知道"bc"
的排列,它們是["bc", "cb"]
。 您如何在組合中添加"a"
? 我會采取各迄今生成的元件,並插入a
在每個位置上。 因此,采用"bc"
,並在每個位置插入"a"
,您將得到["abc", "bac", "bca"]
。 然后對"cb"
進行相同的操作。 這將我們引向基本情況:由於每個遞歸都乘以結果數,因此基本情況下的結果數必須為1,而不是0,因為當我們遍歷上一級的解決方案時,您將無法追加什么都沒有,因為那里什么也沒有。 因此, anagrams("")
必須返回[""]
(這樣以后再插入"c"
會將其置於它可以的唯一位置)。
不幸的是,這已經是我們要討論的兩個循環(即使具有算法的一般遞歸性質):一個循環遍歷["cb", "bc"]
,另一個遍歷插入"a"
的位置。 如果您可以使用理解力,則可以輕松完成此操作。 如果不能,那么...每個循環都可以重寫為遞歸,所以...讓我想想更多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.