我被分配了一项任务,我们只能使用递归方法来解决给我们的不同问题。我对编程还很陌生,我很难理解它。
作业的目标之一是计算任何给定二维整数数组中所有可能路径的最大值。基本上这意味着当给定一个 2D int 数组时,我需要使用递归遍历数组中的所有不同路径(遵守一次仅向下移动一个元素或向右移动一个元素的规则)并返回该路径中元素总和值最高的路径的值。
例如:(只是一个随机示例,可以是没有特定顺序或大小的任何 2D int 数组)
int[][] arr = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}};
输出应该是:'48' (1 + 5 + 9 + 10 + 11 + 12)
这就是我到目前为止所拥有的(但我有一种感觉我很遥远):
public static int maxVal(int[][] arr) {
return maxVal(arr, 0, 0);
} // end of method
// Returns the value of the maximal path in the
// given 2D array, starting at location (i,j)
private static int maxVal(int[][] arr, int i, int j) {
// terminates when reaches last element
if ((i + 1) == arr.length && (j + 1) == arr[0].length) {
return 0;
} else {
// if the elemnt is at the last column
if ((i + 1) == arr.length) {
return maxVal(arr, i, j) + arr[i][j - 1];
// if element is at the last row
} else if ((j + 1) == arr[0].length) {
return maxVal(arr, i, j) + arr[i - 1][j];
} else {
return maxVal(arr, i, j) + arr[i - 1][j - 1];
}
}
}
我不断得到一个StackOverFlowError. 任何建议都会非常有帮助。