为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 powersOf2(int n) 程序的控制台输出中打印 3 个值

为什么 powersOf2(int n) 程序的控制台输出中打印 3 个值

炎炎设计 2023-07-19 10:51:50
问题是当 n 为 4 时,它会打印 1、2 和 4package Example_16;public class Example {public static int powersOf2(int n) {    if (n < 1) {        return 0;    } else if (n == 1) {        System.out.println(1);        return 1;    } else {        int prev = powersOf2(n / 2);        int curr = prev * 2;        System.out.println(curr);        return curr;    }}public static void main(String[] args) {    powersOf2(4);} }我预计输出只有 4 而不是 1 和 2,但是控制台输出显示在下面,我不明白为什么会打印 1 和 2$javac Example_16/Example.java$java -Xmx128M -Xms16M Example_16/Example124
查看完整描述

2 回答

?
森栏

TA贡献1810条经验 获得超5个赞

当你第一次打电话时powersOf2(4),n == 4. 因此,您可以遵循else函数内的分支:


int prev = powersOf2(n / 2);

int curr = prev * 2;

System.out.println(curr);

return curr;

这里发生的第一件事是powersOf2再次调用 2,然后是 1。在第三次调用时,n == 1返回并打印 1,如行 中所示System.out.println(1);。


但是,一旦该调用返回,您现在就处于上一个调用中,其中参数为 2。因此现在 prev = 1,因为它已返回。所以curr设置为 2,即prev * 2。然后您打印并返回curr。打印 2。返回时,将其乘以 2 并打印并再次返回,总共打印 3 次。


查看完整回答
反对 回复 2023-07-19
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

您的代码是一个递归程序。

第一次调用 powersOf2 方法(从 main 方法)n = 4 时,它会转到 powersOf2 的其他部分,其中第二次调用 powersOf2。

在第二次调用 powersOf2 n =2 方法时,它再次转到 powersOf2 的 else 部分,在那里进行第三次调用。

第三次调用 powersOf2 n = 1 方法时,它会转到 else if 部分 (n == 1) 并在控制台中打印 1。之后,它从第二次调用返回并打印 2(在 else 部分),之后它从第一次调用返回并打印 4(再次在 else 部分)。

所以你会打印出 1、2 和 4。


查看完整回答
反对 回复 2023-07-19
  • 2 回答
  • 0 关注
  • 171 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信