为什么我需要提到方法名称?为什么不简单地(n-1)* n?

时间:2018-02-28 10:05:58

标签: java

以下是示例代码,我在Java The Complete参考,第9版中看到了这个。

// A simple example of recursion. 

class Factorial {           // this is a recursive method 

int fact(int n) { 

    int result;

    if(n==1) return 1; 

    result = fact(n-1) * n;  //This is my question, why not just (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));  //

} }

2 个答案:

答案 0 :(得分:0)

因为否则它不会再次调用该函数,只会计算n*(n-1)并退出。对于3,这将3x2=6,实际上等于3!。但是,如果您使用4!进行尝试,那么您的更改将会返回4x3=12,而实际上计算4!时它应该会4x3x2x1=24

答案 1 :(得分:0)

答案很简单,因为大多数基于递归方法的因子算法,这意味着fucntion自称,如果写(n -1) * n它只会乘以一次而结果将是错误的(不是n! )。 有很多关于递归方法的文章以及因子如何工作。阅读那些例如: https://www.khanacademy.org/computing/computer-science/algorithms/recursive-algorithms/a/recursive-factorial https://introcs.cs.princeton.edu/java/23recursion/