我有这个递归因子函数:
public class Driver{
public static void main (String args[])
{
System.out.println(factorial(5));
}
private static int factorial(int n)
{
int product;
if (n <= 2){ product = n; return 2;}
else{
product = n * factorial(n-1);
System.out.println("current product =" + product);
System.out.println("product = " + n + " * factorial(" + (n-1) + ")");
}
return product;
}
}
它打印以下内容:
current product =6
product = 3 * factorial(2)
current product =24
product = 4 * factorial(3)
current product =120
product = 5 * factorial(4)
120
我正在试图弄清楚这里到底发生了什么。我不明白它是如何开始打印n = 2.当前产品= 6来自哪里?谢谢!
答案 0 :(得分:4)
n==2
是您的基本情况,因此通过以下行的第一个功能是n-1 == 2
或n == 3
。这是因为您的输出是在递归调用之后执行的,因此它首先打印最深的调用(感谢Patricia Shanahan)。如果您希望从大到小进行打印,请将println
行移到递归调用factorial
的行上方。
product = n * factorial(n-1);
,
if (n <= 2){ product = n; return 2;}
由于这么多原因,这是错误的。
应该是
if (n <= 1){ return 1;}
如果您无法理解这一点,请记住每个factorial的调用都独立于其他调用。