这里是一个递归方法:在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