コードは、Javaの再帰でスタックオーバーフローエラーを返します。

Ken4ward:

このコードは、私が何をしますか、スタックオーバーフローエラーが返されますか?

/* package whatever; // don't place package name! */

import java.io.*;

class myCode
{
  public static void main (String[] args) throws java.lang.Exception
  {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String input = br.readLine();

    System.out.println(printStar(Integer.parseInt(input)));
  }


    private static int printStar(int n){
    if(n > 0){
        System.out.print("\n hello");

    }
      return printStar(n-1);

  }

}
マシュー旗:

あなたは数2で入力しましょう。

第一コール:printStar(2)印刷helloと通話printStar(1)

第二コール:printStar(1)印刷helloと通話printStar(0)

第三コール:printStar(0)ので、何も印刷されませんn > 0falseです。しかし、まだ呼び出しますprintStar(-1)

あなたのコードは、独立して、nの値の次のステップを呼んでいます。あなたが達成したいものの私の理解では、あなたの再帰呼び出しが内にある必要がありますifブロック。場合はn > 0falseを返すだけのような、何か他のものを返します-1

コードは次のようになります。

private static int printStar(int n) {
    if (n > 0) {
        System.out.print("\n hello");
        return printStar(n - 1);
    }
    return -1;
}

私があれば、私はよく分からないこと、けれども、ポイントに持ってprintStar値を返すことは良いアイデアです。返される値は常に同じになります。あなたはに方法を変更することができますvoidあなたの全体のコードは次のようになります。

public static void main(String[] args) throws java.lang.Exception {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String input = br.readLine();

    printStar(Integer.parseInt(input));
}

private static void printStar(int n) {
    if (n > 0) {
        System.out.print("\n hello");
        printStar(n - 1);
    }
}

おすすめ

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