2 回答

TA貢獻1810條經(jīng)驗 獲得超5個贊
當你第一次打電話時powersOf2(4),n == 4. 因此,您可以遵循else函數(shù)內(nèi)的分支:
int prev = powersOf2(n / 2);
int curr = prev * 2;
System.out.println(curr);
return curr;
這里發(fā)生的第一件事是powersOf2再次調(diào)用 2,然后是 1。在第三次調(diào)用時,n == 1返回并打印 1,如行 中所示System.out.println(1);。
但是,一旦該調(diào)用返回,您現(xiàn)在就處于上一個調(diào)用中,其中參數(shù)為 2。因此現(xiàn)在 prev = 1,因為它已返回。所以curr設(shè)置為 2,即prev * 2。然后您打印并返回curr。打印 2。返回時,將其乘以 2 并打印并再次返回,總共打印 3 次。

TA貢獻1783條經(jīng)驗 獲得超4個贊
您的代碼是一個遞歸程序。
第一次調(diào)用 powersOf2 方法(從 main 方法)n = 4 時,它會轉(zhuǎn)到 powersOf2 的其他部分,其中第二次調(diào)用 powersOf2。
在第二次調(diào)用 powersOf2 n =2 方法時,它再次轉(zhuǎn)到 powersOf2 的 else 部分,在那里進行第三次調(diào)用。
第三次調(diào)用 powersOf2 n = 1 方法時,它會轉(zhuǎn)到 else if 部分 (n == 1) 并在控制臺中打印 1。之后,它從第二次調(diào)用返回并打印 2(在 else 部分),之后它從第一次調(diào)用返回并打印 4(再次在 else 部分)。
所以你會打印出 1、2 和 4。
添加回答
舉報