簡體   English   中英

Python-遞歸字謎函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM