1

Java の再帰的メソッドを理解しようとしており、この簡単な方法で階乗を計算しようとしました。どういうわけかうまくいきません。誰かが理由を教えてもらえますか?

public class FactorialRecursive extends ConsoleProgram {

   public void run() {
      println("This program calculates the factorial of an integer n.");
      int n = readInt("Please insert n: ");
      int result = factorial(n);
      println("The factorial of " + n + " is " + result);
   }

   private int factorial(int n) {
      int total;
      if (n == 1) total = 1;
      total = n * factorial(n - 1);
      return (total);
   }
}
4

4 に答える 4

4

これは、基本ケース ( n == 1) がすぐに返されないためです。

を割り当てるだけtotalで、戻りません。代わりに、n * factorial(n-1)再び使用して、無限再帰に入ります。

に置き換えて修正

if (n==1) return 1;

または追加else

if (n==1) total = 1;
else total = n * factorial (n-1);
于 2012-11-30T11:15:25.640 に答える
3

再帰を終了していません。試す

if (n==1) total = 1;
else total = n * factorial (n-1);
于 2012-11-30T11:15:58.903 に答える
2

問題は、ベースケースを見つけたときに止まらないことです

 if (n==1) total = 1;

むしろする

 if (n==1) return 1;
于 2012-11-30T11:16:04.927 に答える
2

次の行を置き換えます。

if (n==1) total = 1;

に:

if (n==1) return 1;

そうしないと、無限ループになります。

あなたの方法は次のようになります:

private int factorial(int n) {
    return n==1 ? 1 : n * factorial (n-1);
}
于 2012-11-30T11:16:23.740 に答える