簡體   English   中英

如何使用原始方法名稱作為參數傳入來跟蹤Java中的遞歸方法

[英]How to trace through a recursive method in java with the original method name passed in as an argument

我已經獲得了遞歸示例練習。 總體上,我能夠完美地跟蹤遞歸方法,但是有一種遞歸方法存在跟蹤問題。

static int fg(int x) {
    if (x < 5) {
        return x * x + 1;
    }

    if (x == 5) {
        return x * x - 3;
    }

    return fg(x - 2);
}

我通常會知道如何通過此代碼進行跟蹤,但問題是“從方法調用fg(fg(fg(fg(3)))返回什么值?”?

您是否有關於如何通過這種方法調用來跟蹤此代碼的想法? 謝謝。

只需考慮每個函數分別調用函數。 步驟1:第一個fg(3)=>這將返回3 * 3 +1 = 10步驟2:接下來的fg(10)=>既不滿足與5相關的條件,控制權轉到最后一條語句返回fg(10-2 )因此fg(8)=> fg(6)=> fg(4); 現在4滿足第一個條件; 返回4 * 4 +1 = 17; 步驟3:現在最后一個片段fg(17); 與步驟2相似,此數字遞歸減少2,直到小於或等於5以滿足前兩個if塊之一; fg(17)=> fg(15)=> fg(13)=> fg(11)=> fg(9)=> fg(7)=> fg(5)現在是5,如果滿足塊,則第二個; 因此返回5 * 5-3 = 22;

那是你的最終答案!

原始方法名稱未作為參數傳遞。 該參數聲明為int ,方法名稱和方法引用均不是int 而是調用最內部的方法fg(3) ,其返回值成為周圍調用的參數,然后其返回值成為最外部調用的參數。

認為它等同於:

int first = fg(3);
int second = fg(first);
int answer = fg(second);

僅沒有臨時變量。

暫無
暫無

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

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