【问题标题】:Recursive mystery method -- Can someone explain this to me? [duplicate]递归神秘法——有人可以向我解释一下吗? [复制]
【发布时间】:2016-02-19 04:47:03
【问题描述】:

对于以下方法,当调用神秘(45)时,输出为“1 0 1 1 0 : 2 5 11 22 45”。我明白为什么会打印出“1 0 1 1 0 :”,但不明白冒号后如何打印出“2 5 11 22 45”。谁可以给我解释一下这个?我试过把它写出来,但我就是想不通。

public static void mystery (int n) {
   if (n <= 1) {
       System.out.print(": ");}
   else {
      System.out.print((n % 2) + " ");
      mystery (n/2);
      System.out.print(n + " ");
   }
}

【问题讨论】:

  • 你试过通过它调试吗?这是您了解正在发生的事情的最明显方式。随时关注调用堆栈......如果有帮助,请添加更多日志记录。
  • 尝试自己执行代码并将结果写在一张纸上,然后你就会解开这个谜。

标签: java recursion


【解决方案1】:

它是递归的,所以调用看起来像这样。

System.out.print((45 % 2) + " ");
    System.out.print((22 % 2) + " ");
        System.out.print((11 % 2) + " ");
            System.out.print((5 % 2) + " ");
                System.out.print((2 % 2) + " ");
                    mystery (2 / 2); <-- won't recurse anymore, will just print :
                System.out.print(2 + " ");
            System.out.print(5 + " ");
        System.out.print(11 + " ");
    System.out.print(22 + " ");
System.out.print(45 + " ");

【讨论】:

  • 您格式化代码的方式非常好。
猜你喜欢
  • 1970-01-01
  • 2017-10-03
  • 1970-01-01
  • 2020-08-17
  • 2012-06-13
  • 2014-04-20
  • 2011-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多