這裏是一個遞歸方法:在Java中遞歸期間如何處理參數更改?
private static int minimumTotal(List<List<Integer>> triangle, int index) {
if (triangle.isEmpty()) {
return 0;
}
List<Integer> row = triangle.remove(0);
int sum1 = row.get(index) + minimumTotal(triangle, index);
int sum2 = row.get(index) + minimumTotal(triangle, index + 1);
return Math.min(sum1, sum2);
}
欲sum1
和sum2
被同一triangle
對象計算。但是,會發生以下情況:sum1
計算後,triangle
的一行(然後在遞歸中另一行,另一行...)。現在,當計算sum2
時,它有一個空的triangle
!
這讓我困惑於Java如何處理遞歸。爲什麼要修改對象
triangle
?我假設它應該是每個遞歸級別的「本地」數據。如何重寫代碼以獲得所需的行爲?
作爲一個例子,讓我們說的triangle
對象具有兩行(由整數的兩個列表給出)。 sum1
應該從第一行獲取某些內容,然後遞歸調用剩餘只有一行的triangle
上的方法。同樣,sum2
也應該從第一行獲取某些內容,然後遞歸調用triangle
上只剩下一行的方法。但是,我看到的是以下內容。計算sum1
後,triangle
爲空。因此,sum2
被分配了錯誤的值!
謝謝!我發現這個解決方案最容易實現和直觀。 – user3817287 2014-11-02 15:51:45