以下是示例代码,我在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)); //
} }
答案 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/