2016-05-23 72 views
1

我知道有多種方法可以找出單詞是否是迴文式的,就像使用StringBuilder的反向函數甚至是Collections的反向函數一樣,但爲了學習遞歸,我這樣寫的。我甚至讓它迭代工作。試圖想出使用遞歸的解決方案

我在我的嵌入式else語句中返回true,但我真的不知道該怎麼做,因爲當我在調試模式下運行它時,它返回false,然後再次調用checkPalindrome,我不理解爲什麼,因爲它應該返回並終止,不是嗎?我真的很感激我解釋我做錯了什麼,以及如何讓它以這種方式工作。

public static boolean checkPalindrome(Deque deq) { 
    if(deq.pollFirst() != deq.pollLast()) { 
     return false; 
    } else { 
     if(deq.size() == 1 || deq.size() == 0) { 
      return true; 
     } else { 
      checkPalindrome(deq); 
      return true // TODO ?? figure out What to put here ?? 
     } 
    } 
} 

回答

2

這就是說,當你給自己打電話時,你沒有返回任何東西。內else語句應該閱讀:

else { 
    return checkPalindrome(deq); 
} 

您的評論有一個後續問題以下,導致我想解釋如何遞歸方法的工作,但在本質上,它們都遵循以下僞代碼:

public boolean someMethod(T[] someArrayOrList) { 
    // return true -OR- 
    // return false -OR- 
    // call yourself and return whatever that call returns 
} 

無論什麼時候,當你調用該方法將返回的東西......它要麼會返回自己的東西,否則會返回任何的自身的一些其他調用將返回。從某種意義上來說,它與所有的答案是一致的,但實際上TRUE只產生一次。

+1

_下降到膝蓋和尖叫_ ** noooo ** 我擔心這可能是答案......如此困惑,爲什麼?是否和每個實例? – Spider

+0

你有了這個概念,在學習如何構建遞歸方法時,你的失敗是一個常見的概念。 –

+0

所以它按照你的建議工作,但是我爲什麼會超級困惑,返回false,然後執行下一個語句或者執行return true;然後進入下一個語句,你可以爲我清除它嗎?或者它只是獲得了以前的回報價值?它如何知道結束? 是說第一個實例,TRUE,下一個TRUE,最後一個FALSE,所以它說的是返回TRUE && TRUE && FALSE? – Spider

相關問題