簡體   English   中英

遞歸輸出

[英]Recursive Outputs

這是我對遞歸問題的以下代碼

有人可以讓我了解24的輸出嗎?

為了證明我的困惑,我認為輸出應該是6,12,20,1

package Examples;

public class QuestionDemo {

public static void main(String[] args) {

    System.out.println(recCall(2));
}

public static int recCall(int num) {

    if (num == 5) {
        return 1;
    } else {
        return num * recCall(++num);
    }

}
}

您有4個遞歸調用,當您調用recCall(2),然后再調用recCall(3),recCall(4)和recCall(5)recCall(5)返回1 recCall(4)返回4 * 1 recCall(3)返回3 * 4 * 1 recCall(2)返回2 * 3 * 4 * 1 = 24

recCall(int num):

recall(2)
    |       | 
   2 *    recall(3)
              |       |
              3 *  recall(4)
                      |         |
                      4 *    recall(5)
                                |
                                1           



recall(2) = 24
            |       |
            2 *   12 = 24
                    |      |
                    3 *    4 = 12
                           |       |
                           4 *     1 = 4
                                   |
                                   1                                                 

此遞歸采用自下而上的方法。 在獲得其他遞歸調用的值之前,首先要最深入地找到基本案例的值。

這就是為什么輸出 = 24的原因:

                                       _
                                      /|\ 
                                     / | \
recCall(4) = 4 * recCall(5) = 4  +  /  |  \ // recCall(5) is your base case.
recCall(3) = 3 * recCall(4) = 12 +     |
-----------------------------------    |
recCall(2) = 2 * recCall(3) = 24       | // This was your first call to the recursive function.

您不是遍歷值,而是它們全部加起來。

這是因為您使用的是recCall(++num) ,並且使用的是pre-increment運算符,該運算符會在調用方法之前增加值。

請閱讀++預遞增在Java中的工作原理:- 后遞增(i ++)和預遞增(++ i)運算符在Java中如何工作?

因此您的遞歸調用將如下所示

 f(2)= 2*f(3)=2*12 = 24.
        f(3)=3*f(4)= 3*4=12
            f(4)=4*f(5) = 4*1
                f(5)= 1

因此返回24。

是的,如果您嘗試移動召回(++ num)並放置新的數字++num ,則結果將為= 2 * 3 * 4 ,在5中它將返回1,因此2 * 3 * 4* 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM