簡體   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