Я думаю, что вы можете искать, это функция-обертка. В текущем состоянии цикл for выполняется внутри рекурсивного метода, поэтому каждый раз, когда вызывается этот метод, он запускает цикл for. Похоже, вы хотите, чтобы он запустил рекурсивный метод, а затем в конце распечатал результат. Для этого вы можете поместить весь рекурсивный код в так называемый вспомогательный метод и назвать его hourglassSumHelper()
или что-то в этом роде:
private static void hourglassSumHelper(int[][] arr) {
int sum=0;
int size=arr.length/2;
for(int i=rowIncrement;i<size+rowIncrement;i++) {
for(int j=columnIncrement;j<size+columnIncrement;j++) {
sum = sum+arr[i][j];
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
System.out.println(sum);
sumArray[count]=sum;
System.out.println();
columnIncrement++;
if(columnIncrement==(arr.length/2)+1) {
rowIncrement++;
columnIncrement=0;
}
if(rowIncrement<(arr.length/2)+1) {
count++;
hourglassSumHelper(arr); // Make sure you change the recursive call as well
}
}
Затем сделать hourglassSum()
функцией-оберткой, единственная цель которой -чтобы вызвать вспомогательный метод, затем распечатать результат:
static void hourglassSum(int[][] arr) {
hourglassSumHelper(arr);
for(int i=0;i<sumArray.length;i++) {
System.out.println(sumArray[i]+" ");
}
}
Теперь, когда вы вызываете hourglassSum()
, он вызовет вспомогательный метод, и только тогда, когда он вернется из метода, он распечатаетответь один раз.