2016-05-05 3 views
-1

私は、再帰を使ってfactorialRecursiveメソッドで入力階乗を計算しようとしていますが、そのメソッド内の変数やオブジェクトを宣言することはできません。メソッドは既に動作していますが動作しません。これは、forループではなくforループで自分自身を呼び出す必要があります。新しい変数なしで階乗を計算するために再帰を使用する

class Factorial{ 
    public static void main(String[] args){ 
    Scanner input = new Scanner(System.in); 
    int number; 
    do { 
     System.out.print("Enter a positive number: "); 
     number = input.nextInt(); 
    } while (number < 0); 
    System.out.println(number + "! = " + factorialIterative(number) + " (iterative)"); 
    System.out.println(number + "! = " + factorialRecursive(number) + " (recursive)"); 
    } 

    private static int factorialIterative(int num) { 
    int result = 1; 
    while (num > 0) { 
     result = num*result; 
     num--; 
    } 
    return result; 
    } 

    private static int factorialRecursive(int num){ 
    if (num==1 | num==0) 
     return 1; 
    return num*(num-1) * num; 
    } 
} 
+0

**階乗再帰は** ** Javaで**このサイトで何回も処理されました。これらの3つのキーワードを検索すると、十分なヒットが得られます。そのうちの1つがクロージャ投票に入ります。 – Prune

答えて

2

はこれを試してみてください。

private static int factorialRecursive(int num) { 
    // Warning here use || instead of | 
    if (num==1 || num==0) 
     return 1; 
    return num * factorialRecursive(num - 1); 
} 

私も、このように単純化することができます。

private static int factorialRecursive(int num) { 
    return (num == 1 || num == 0) ? 1 : num * factorialRecursive(num - 1); 
} 
1

変数を宣言する必要はありません。階乗の反復関係を利用する:

n! = n *(n-1)!

num - 1を渡すことによって再帰呼び出しを行った結果、numが得られます。その製品を変数に格納せずに返します。

-1

再帰を使用すると、メソッドの内部でメソッド自体を呼び出す必要が

を意味例:

private static int factorialRecursive(int num){ 
    if (num==1 | num==0) 
     return 1; 
    return num*factorialRecursive(num-1); 
    } 

と階乗以来、整数以外のデータ型を使用することを検討し、低い値と本当に高い増加します。 ...そう、それはあなただけはint型を使用して無効なデータを取得することの後に階乗(16)まで動作します...

private static long factorialRecursive(long num){ 
     if (num==1 | num==0) 
      return 1; 
     return num*factorialRecursive(num-1); 
     } 
関連する問題