再帰を使用して指定された配列でPritningサブアレイ

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);
    }
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=373275&siteId=1