Anubhuti Srivastava氏:
私は、Javaプログラミングの初心者です、私は再帰の概念を使用して、指定された配列内のサブアレイを印刷しようとしています。
私は自分の目的の結果を取得していますが、私はまた、いくつかの実行時エラーを取得しています。
私のコード:
インポートjava.util.Scanner;
public class GFG {
public static void printArrays(int[] arr, int start,int end,int n){
for (int i = start; i <= end; i++){
System.out.print(arr[i]+"");
}
System.out.print("\n");
}
public static void subArrays(int[] arr, int start, int end,int n) {
if (end < n) {
printArrays(arr, start, end, n);
subArrays(arr, start, end + 1, n);
}
if (end >= n) {
subArrays(arr, start + 1, start + 1, n);
}
if (start >= n) {
return;
}
}
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = scan.nextInt();
}
subArrays(arr, 0, 0, n);
}
}
The error that I'm getting is this:
Exception in thread "main" java.lang.StackOverflowError
at GFG.subArrays(GFG.java:16)
at GFG.subArrays(GFG.java:16)
at GFG.subArrays(GFG.java:16)
コードの16行は "サブアレイ(ARR、1 +開始は、+ 1を起動し、N);"
私の出力は以下です:
1
12
123
2
23
3
アービンド・クマールのAvinash:
あなたがのための条件をチェックしているので、あなたの問題はあるreturn
最後に(すなわち、開始の値)が、その前に、あなたはすでに呼び出しているprintArrays(arr, start, end, n);
、subArrays(arr, start + 1, start + 1, n);
とsubArrays(arr, start, end + 1, n);
どこインデックスが限度を超えて起こっています。の先頭に次のチェックを入れてsubArrays
:
if (start >= n) {
return;
}
次のように:
public static void subArrays(int[] arr, int start, int end, int n) {
if (start >= n) {
return;
}
if (end < n) {
printArrays(arr, start, end, n);
subArrays(arr, start, end + 1, n);
}
if (end >= n) {
subArrays(arr, start + 1, start + 1, n);
}
}