這裏是計算機科學系的第二年級學生,作爲遞歸練習的一部分,我們已經給LispLists一些任意問題。我被卡住了一半,所以如果任何人都可以在沒有明確地給我答案的情況下指向正確的方向,那會很好。遞歸查找在不斷縮小的LispList中INT的索引
我需要找到在LispList listToCheck的intToFind每個實例的位置 - 唯一的條件是:
- 沒有額外的參數可以用來
- 它必須遞歸地完成
對於每個一個誰沒有遇到LispLists - 他們沒有索引,你可以叫他們的唯一方法是:
- .isEmpty()返回布爾
- 。頭()第0位置返回元件
- .tail()返回不是頭部 所有元素的LispList個
- .cons(值)增加價值, '頭' 的位置 - 換檔一切一跌
還有一個方法,我寫了以前稱:
- recursiveCountLength(列表)返回傳遞的LispList的長度的整數。
我一直在測試上的名單是:[2,3,4,2,5,12,2,5],所以我在尋找的結果是[0, 3,6] - 與出路,這裏就是我這麼遠(我後試圖解釋):
public static LispList<Integer>
recursivePositions(LispList<Integer> listToCheck, int intToFind)
{
if(listToCheck.isEmpty()) return listToCheck;
else {
// go through the array in its entirety once through,
// do everything else 'on the way back up'
LispList<Integer> positions = recursivePositions(listToCheck.tail(), intToFind);
//get the current length and current head
int currentInt = listToCheck.head();
int currentLength = recursiveCountLength(listToCheck);
//if a match is found, add the current length of the list to the list
if(currentInt == intToFind) return positions.cons(currentLength);
else return positions;
}
}
我目前的理論是,在每次遇到數組的長度是我們正在尋找的int(在這種情況下是2)從列表的原始長度(在本例中爲8)中減去將給我們索引。
- 第一情況與8的長度(8-8 =索引的0,因此索引現在[0]),
- 下爲5的長度發生(8-5 =索引3,因此索引現在[0,3]),
- 最後發生在長度爲2(8-2 =索引6,因此索引現在[0,3,6])。
唯一的問題是,我不知道如何得到一個靜態'8' - 這讓我得出結論,我完全以錯誤的方式接近這一點。有人在這裏有任何提示嗎?任何幫助將非常感激。
你寫的這個方法是有效的「一個額外的參數」,只是實現的功能,而不是深度跟蹤整數。你可以使用它嗎?你是否應該使用它? – 2014-10-18 18:13:30
你得到一個職位列表。對於每個遞歸步驟,我都會更新這個返回的列表。這不是如何將它寫入「真正的」Lisp,而是以某種「純粹」的Lisp寫成...... – 2014-10-18 19:19:17