2016-02-25 76 views
-1
def solver(word): 
#trackerCount = len(word 
convertedKey = sum(bytearray(word,'utf8')) 
if(len(word)>=MIN_WORD_LENGTH): 
    countdownLetters = wordmap.get(convertedKey) 
    if(convertedKey in wordmap): 
     for str in countdownLetters: 
      if sorted(word)==sorted(str) and str not in result: 
       result.update({str:len(str)}) 

    if(len(word)==9 and len(result)>0): 
     return result 
    tempList = list(word) 
    for i in range(len(tempList)): 
     charTmp = tempList.pop() 
     wordStr =''.join(tempList) 
     tempList.insert(0,charTmp) 
     solver(wordStr) 
return result 

我正在使用遞歸函數寫一個倒計時字母解算器。我想完全停止調用遞歸 函數,當我找到最長的字母。例如,假設我將一個詞「教育」傳遞給求解器函數。 讓我們假設,我們沒有任何教育的字謎,現在我想檢查是否有任何長度的單詞(8)。 如果有長度爲8的單詞,我想退出該功能,但如果沒有8個字母單詞我想 檢查7等等。我只想找到最長的單詞。關閉課程如果我有超過一個字(長度) 作爲最長的單詞,我想讓他們全部。上面的循環找到從最大長度(9)到最小長度(5)的所有單詞。倒計時字母解算器 - 遞歸Python

上面代碼說明: 基本上,如果我沒有9個字母(最大)字,那麼我彈出最後一個元素,創建一個tempWord(wordStr)插入charTemp(列表的最後一個元素),並調用求解器函數刪除了一個字母。上面的循環找到從最大長度(9)到最小長度(4)的所有單詞。 上面代碼的輸出在這裏。 http://postimg.org/image/pgfixbglv/。請看看,這可能會更有意義。在圖片中,你可以看到9個字母的單詞。我希望我的遞歸函數能夠在那個時候返回,但是如果沒有9個字母,我想查找8個字符,並且再次找不到8個字母單詞,然後移到7個等等。在防止出現StackOverflow異常的那一刻,我有指定最小字長。即5

回答

0

這裏的問題在你的終止條款中;

if(len(word)==9 and len(result)>0): 
    return result 

這非常明確地表示,只有當您從9個字母的單詞中找到結果時才停止。除非len(字)是9,否則您將丟棄遞歸代碼。

由於舊的堵嘴,如果這不是你想要的,那麼不要這樣做。只要檢查你是否有一些結果;如果是這樣,請將其退回。我不能說這是否足夠,因爲你沒有展示如何管理通過下層循環收集各種運行的所有結果(因爲你需要它們),也不知道你如何去掉每個9的結果字母輪流離開其他8.

+0

我已經更新了整個功能。你能幫我解決嗎?問題仍然存在......如果我輸入解決方法(「edumation」)而不是「教育」。然後它會帶來全部8,7,6,5。如果沒有9個字母的字母「edumation」。我們檢查8個字母。一旦我們找到8個字母的單詞,我想退出這個功能,但是上面的實現會帶來8,7,6,5等所有單詞。 –

+0

我很樂意提供幫助,但是如果沒有[MCVE ](http://stackoverflow.com/help/mcve)。除非我們能夠從您的帖子中重現問題,否則我們「正在用一隻手鬥爭」。目前,我沒有足夠的信息來說明** **和**結果**。而不是推測,我會等待完整的例子。如果有幫助,我可以使用我自己的詞彙庫來代替您使用的任何單詞列表。 – Prune