我正在研究Boggle遊戲,有些人告訴我搜索單詞的最佳方法是使用遞歸。我正在嘗試使用searchWord方法來搜索單詞。如果找到第一個字母,該方法將自行調用並刪除第一個字母。當長度== 0(找到字)或false(未找到字母)時,該方法返回true。問題有時會在一個「骰子」中多次出現相同的字母......爲了解決這個問題,我需要計算該字母,如果它不止一次出現,它應該搜索該字母的下一個外觀(搜索同一個字不丟棄第一個字母)。我需要一種方法來記住該字母和多個字母所圍繞的字母索引,以便在未找到該字母時檢查是否還有其他可能性。由於這是一個遞歸方法,我不知道如何將這些放在一個變量中,因爲只要方法調用它們,它們就會被更改...Java:記住遞歸方法的前一步的結果
希望你們可以幫忙!這裏的方法:
public boolean searchWord(String word, int i, int j) {
boolean res;
if (word.length() == 0) {
res = true;
} else {
String theWord = word.toUpperCase();
int[] indexes = searchLetter(Character.toString(theWord.charAt(0)), i, j);
if (indexes[0] > -1) {
res = searchWord(theWord.substring(1), indexes[0], indexes[1]);
} else if(countLetter(Character.toString(/*The value that has to be memorized*/), /*index 1 that has been memorized*/, /*index 2 that has been memorized*/) > 1) {
res = searchWord(theWord, i, j);
} else {
res = false;
}
}
return res;
}
注:是的,我使用字符串這是奇怪,因爲字符可能是一個更好的選擇,但以後我可能會改變。
我寄給我的老師,他說,這是最好的完成遞歸,儘管這很困難。我還沒有真正瞭解過堆棧,或者我不明白你的意思。我仍然是初學者(在學校只有3-4個月的java):s –
好的。那麼讓我來幫助遞歸。遞歸的問題是你沒有存儲你所在的任何框架。堆棧是使用LIFO(後進先出)的數據結構:將事物推入堆棧,然後將其彈出。舉例來說,如果你編寫一個解析器,一個Stack允許你維護你想要的關於你在AST(抽象語法樹)中構造的每個節點的上下文信息。 – Rob
由於以下幾個原因,Rob的投訴並不一般。首先,在許多情況下,遞歸是代碼清晰度方面更優雅的方式。其次,使用堆棧(是的,呼叫推送也是方法調用)時,調用方法調用非常便宜。 – Dan