2012-11-30 56 views
1

我想了解Java中的遞歸方法,並嘗試使用這種簡單的方法來計算階乘。 不知何故,它不起作用。有人能告訴我爲什麼嗎?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); 
    } 
} 
+3

只要它下來到n == 1,你應該返回否則你還是去到階乘,從不出來再 – pengibot

+0

調試是你的朋友,你會發現在一分鐘平坦的錯誤:-) – pengibot

回答

3

這是因爲您的基本案例(n == 1)不會立即返回。

您只指定total,但不返回:相反,您再次使用n * factorial(n-1),進入無限遞歸。

修復與

if (n==1) return 1; 

更換或添加else

if (n==1) total = 1; 
else total = n * factorial (n-1); 
3

您還沒有終止的遞歸。嘗試

if (n==1) total = 1; 
else total = n * factorial (n-1); 
+0

謝謝你們!不知道 – Pedro

2

的問題是,你不要當你發現阻止你的基本情況

if (n==1) total = 1; 

而是做

if (n==1) return 1; 
2

將行:

if (n==1) total = 1; 

方式:

if (n==1) return 1; 

否則,您將無限循環。

你的方法是:

private int factorial(int n) { 
    return n==1 ? 1 : n * factorial (n-1); 
}