当前位置: 首页 > 知识库问答 >
问题:

递归神秘方法——有人能给我解释一下吗?[重复]

高晋
2023-03-14

对于下面的方法,调用神秘(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 + " ");
   }
}

共有1个答案

易镜
2023-03-14

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

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 + " ");
 类似资料:
  • 我这里有一些关于Java的练习问题。我们应该在不使用编译器的情况下确定答案。 参考以下方法: 调用product(6)时的输出是什么? D)48 E)70 根据答案,正确的输出是48。我真的不明白为什么这是真的。6不符合基本情况,所以转到else语句。那么,乘积(6-2)=乘积(4),乘积(2)得到乘积(0),乘积(2)得到乘积(0),得到6*4,4*2,2*0,0*0。但那是32,不是48?是不

  • 我不知道“?”和“:”的用法。

  • 我试图从Leetcode解决这个问题https://leetcode.com/problems/count-good-nodes-in-binary-tree/ 这是我的解决方案:我无法理解为什么这个递归是来自根的计数值。左节点在遍历根时不起作用。正当据我所知,我是 检查当前节点是否良好并更新计数和列表 遍历左节点更新计数 上面的count应该在遍历右节点时进入右节点并更新计数值,但没有发生 为什

  • 我有这两种方法。我理解“getTotalSalary”一词,但并不真正理解“getAverageSalary(获取平均工资)”的写作方式。我不明白为什么在结尾处使用问号和冒号以及“(size()!=0)”和0。 这是编码: empReg 是 ArrayList 的名称。员工是一个由“姓名”和“薪水”组成的阶级。getSalary 显然是一种返还薪水的方法。

  • 我试图拼凑这个例子中的逻辑。这是正常的代码。仅供参考,我有一个大学导师帮我做这个例子,但他仍在试图找出如何向我解释它。代码也做好了,这个只是为了自己的递归知识。 这是带有标记的测试代码,我用它来找出什么时候发生了什么。这有点碍眼,所以如果你认为不用看这一团糟就可以解释的话,那一定要。 直到第一颗星星印出来我才明白。在printTriangle方法将其减至0后,我打印了n的值,然后在打印第一颗星之前

  • 我想写一个brainfuck口译员,但我错过了一些上下文或其他东西。应该被调用以处理“