【发布时间】:2015-05-14 21:47:42
【问题描述】:
我正在从一本书中学习 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”
我不明白的是 Factorial 类中发生了什么以及为什么不立即计算 *n。这本书没有很好地解释这一点,所以我想我会向任何有经验的程序员寻求帮助。
【问题讨论】:
-
因为在一般的计算机科学和编程中,您希望尽可能多地节省计算量。执行递归 * N 会对系统造成负担。放下它,等待递归到达“1”是一种非常可取的方法。
-
这个问题programmers.stackexchange.com/questions/25052/… 可能是一个很好的起点。
-
远离递归,只有在必要时才使用它
-
作为你自己:什么是 5 的阶乘?答案很简单:“它是 4 的阶乘的 5 倍”。 4的阶乘是多少?它是 3 的阶乘的 4 倍。(等等)
-
@RiteshK,所以没有人应该费心去学习或尝试理解它吗?