递归教程

时间:2015-05-14 21:47:43

标签: java recursion factorial

我正在从一本书中学习Java,并使用一个因子示例来讨论有关递归的章节。

//A simple example of recursion

package tutorials;

class Factorial {
// this is a recursive method
int fact (int n) {
    int result;

    if(n==1) return 1;
    result = fact(n - 1) * n;
    return result;
  }
}

class Recursion {
    public static void main(String args[]) {
        Factorial f = new Factorial();

        System.out.println("Factorial of 3 is " + f.fact(3));
        System.out.println("Factorial of 4 is " + f.fact(4));
        System.out.println("Factorial of 5 is " + f.fact(5));
    }
}

这段代码给出的结果是"因子3是6"和" 4的因子是24"

我不明白的是,课程因素中发生的事情以及为什么* n不会立即计算出来。这本书没有很好地解释这个,所以我想我会问任何有经验的程序员帮忙。

2 个答案:

答案 0 :(得分:2)

如果你调用fact(5),它的工作原理如下:

fact(5)
    5*fact(4)
        4*fact(3)
            3*fact(2)
                2*fact(1)
                    2*1=2 //(since if n==1, 1 is returned directly
                result=2
            result=3*2
        result=4*3*2
    result=5*4*3*2
result=120

递归只是意味着你在自己内部调用一个方法,通常是在操纵参数以适应你的最终结果之后(在本例中为n - 1)。您还要确保定义终端条件(在这种情况下为n==1)。在内部,变量被推送到堆栈以便为每次调用记住,但这可能是另一天的讨论

答案 1 :(得分:-1)

数字n的阶乘定义为: n *(n - 1)*(n - 2)* ... * 1,意思是将n乘以小于n的所有正整数。 在您的示例中,这只是相反的,因此您首先计算n - 1的阶乘,然后将其乘以n。继续这个递归,你计算n - 2,n - 3的阶乘,依此类推,直到你必须计算阶乘为1.在这种情况下,你只需返回1本身并返回递归链计算2的阶乘, 3,... n - 1,n。