[英]Terminating a recursive method in java
我有一个程序正在运行两个递归方法(这些方法添加了二维数组的行和列)。 这两种方法都按预期工作,但是我无法让它们在同一个主要方法体中运行。 我相信这是因为 rowsum 从未真正终止,因此 colsum 永远没有机会运行。 我该如何解决?
编辑:我还想补充一点,即使代码运行良好,我也会收到以下错误。 有什么解释吗?
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("How many rows?: ");
int rows = scan.nextInt();
System.out.println("How many columns?: ");
int cols = scan.nextInt();
int[][] array = new int[rows][cols];
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[0].length; j++) {
array[i][j] = (int) Math.floor(Math.random() * 101);
}
}
System.out.println(Arrays.deepToString(array));
rowsum(array, 0);
colsum(array, 0);
}
public static int rowsum(int array[][], int column) {
int sum = 0;
for (int i = 0; i < array.length; i++) {
sum += array[column][i];
}
System.out.print("Sum of row " + column + ": " + sum + " | ");
if (column >= array[0].length) {
return 0;
} else {
return rowsum(array, column + 1);
}
}
public static int colsum(int array[][], int row) {
int sum = 0;
for (int i = 0; i < array[0].length; i++) {
sum += array[i][row];
}
System.out.print("Sum of column " + row + ": " + sum + " | ");
if (row >= array.length) {
return 0;
} else {
return colsum(array, row + 1);
}
}
对于递归方法,您需要一个终止 state。 你只有一次回报,这意味着你将无限递归。 要终止,您需要一个返回 rowsum 以外的内容的条件(可能涉及列)。
列变得无限大,因此数组上存在数组索引越界错误。 你应该有
if (column >= 5) {
return;
} else {
return rowsum(...)
}
或者其他的东西
为了获得结果,您的递归方法需要一个停止条件。 在这种情况下,结束条件是行或列的结束。 当它到达列行的末尾时,它应该是所有条目的总和。
我必须说有更简单的方法可以做到这一点。 递归不是计算列表总和的最佳方法。 将采用一种更具迭代性的方法。
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("How many rows?: ");
int rows = scan.nextInt();
System.out.println("How many columns?: ");
int cols = scan.nextInt();
int[][] array = new int[rows][cols];
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[0].length; j++) {
array[i][j] = (int) Math.floor(Math.random() * 2);
}
}
int sumOfRow = calculateSumOfRow(array, 0, 0, 0);//calculate the first row of the matrix
int sumOfColumn = calculateSumOfColumn(array, 0, 0, 0);//calculate the first column of the matrix
System.out.println("sum of row: " + sumOfRow);
System.out.println("sum of col: " + sumOfColumn);
}
public static int calculateSumOfRow(int[][] integers , int rowToCalculate, int columnIndex, int sum) {
if(columnIndex < integers[rowToCalculate].length) {
sum += integers[rowToCalculate][columnIndex];
return calculateSumOfRow(integers, rowToCalculate, ++columnIndex, sum);
} else {
return sum;
}
}
public static int calculateSumOfColumn(int[][] integers , int columnToCalculate, int rowIndex, int sum) {
if(rowIndex < integers.length) {
sum += integers[rowIndex][columnToCalculate];
return calculateSumOfColumn(integers, columnToCalculate, ++rowIndex, sum);
} else {
return sum;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.