2016-03-23 63 views
1

我需要在給定列表頭以遞歸方式作爲參數的鏈表中找到最大值。我不知道如何啓動該方法的遞歸部分。這是我迄今爲止所有的。如何遞歸查找鏈表中的最大值?

int maxOfList(List M){ 
    List max = M; 
    if(M == null) 
     return max; 
    if(M.next > max){ 
     max = M.restOfTheInts; 
     return maxOfList(); 
    } 
} 
+0

做什麼,你有一個長1名列表到目前爲止的工作?如果不是,甚至不要試圖考慮遞歸情況。 (提示:不,它不會) –

回答

0

在遞歸中,您經常需要一個入口方法和一個工作方法。入口方法是一種特殊情況,它允許工作方法在所有情況下工作,並且工作人員執行遞歸。

例如,你的工人可能是這樣的:

int maxOfList(int currentMax, List<int> listToCheck) { 
    // Nothing to compare? currentMax is it! 
    if (listToCheck == null || listToCheck.size() == 0) return currentMax; 

    // Compare and return. 
    List<int> restOfList = listToCheck.subList(1, listToCheck.size()); 
    return maxOfList(Math.max(currentMax, listToCheck.get(0)), restOfList); 
} 

然後踢其關閉,您需要進入方法:

int maxOfList(List<int> listToCheck) { 
    return maxOfList(Integer.MIN_VALUE, listToCheck); 
} 
+0

這只是作爲一個優化需要,如果它將尾調用優化。沒有尾部呼叫優化,不需要輔助方法。 –

+0

這就是其中一個原因。另一個原因是,遞歸方法的簽名幾乎總是帶有一個僅用於遞歸的參數。在這種情況下,'currentMax'是一個參數,而不是公共API不需要知道的。 –

+0

我的觀點是,你根本不需要參數,因此不需要幫手。遞歸調用只是'return max(node.value,maxOfList(node.tail))' –

0

所以,遞歸有效工作,需要在函數內部看到整個上下文。

int maxOfList(List m) { 
    if(m.next == null) 
      return m; 
    int previousMax = maxOfList(m.next); 
    if(m > previousMax) 
      return m; 
    else 
      return previousMax; 
} 
+0

你可能需要提供一個'List.next'的實現來完全解釋。 –

+0

同意保羅。我的答案只是一個算法解決方案。在我看來,實現到Java語言應該留給cee讓他有效地理解遞歸。 – pranshuagarwal

0
int maxValue(List m){ 
    return maxValue(m, Integer.MIN_VALUE); 
} 

int maxValue(List m, int num){ 
    if(m.next == null){ 
    if(m.data > num) 
    return num = m.data; 
    } 
    return maxValue(m.next, num); 
} 
0

這應該是非常簡單的。爲了實現遞歸解決方案,請考慮所有這些步驟:

  • 什麼是遞歸的想法?列表{L}的最大值是max(Li, {L} - Li),其中Li是當前元素;
  • 什麼是停止條件?我們知道,如果列表爲空,最大值可能是任何數字會更大的東西,比如說MIN_INT;
  • 把所有在一起:所以,在最後我們可以說,一個僞代碼如下所示:

int maxOfList(List M) { if(M == null) return Integer.MIN_VALUE; int max = maxOfList(M.next); return M.value > max ? M.value : max; }

我假設鏈表有其value內容並指向next中的下一個元素(尾指向null)。如果您發現有任何進一步的問題,看看這個帖子:

Finding Max value in an array using recursion

Python: Recursive function to find the largest number in the list