繁体   English   中英

这个递归函数里面发生了什么?

[英]What's going on inside of this recursive function?

我有这个递归因子函数:

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来自哪里? 谢谢!

n==2是你的基本情况,所以超过下面一行的第一个函数是n-1 == 2n == 3 这是因为您的输出是在递归调用之后执行的,因此它首先打印最深的调用(感谢Patricia Shanahan)。 如果您希望它从大到小打印,请将您的println行移动到递归调用factorial行上方。

product = n * factorial(n-1);

还有

if (n <= 2){ product = n; return 2;}

出于这么多原因,这是错误的..

它应该是

if (n <= 1){ return 1;}

如果您无法理解这一点,请记住每个阶乘的调用都与其他调用无关

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM