java - 解释逐步执行递归代码以在 Java 中将十进制转换为二进制

标签 java binary

因此,这是在 Java 中使用递归将十进制数转换为二进制数的代码,该代码没有任何错误。但是我很困惑编译器是如何执行这段代码的,就像我用纸来解决它一样,但我无法理解编译器是如何处理它并生成输出的。 当我在纸上解决它时,解决方案对我来说没有任何意义。如果有人能告诉我它是如何工作的,请。现在已经在这个问题上坐了 1 个多小时了。

如果有人向我描述代码的逐步执行并获得与代码相同的输出,我会很高兴。

使用了如下所示的递归。

public class RecursionPractice {

    public static void main(String[] args) {
    System.out.println("The converted number is " + dectoBin(7));
    }

private static int dectoBin(int n){
        if(n == 0 )
            return 0;
        else
            return  n % 2 + 10 * dectoBin(n/2);
    }
}

输出符合预期

转换后的数字是111

进程结束,退出代码为 0

最佳答案

逐步执行如下。希望你现在会明白。

1st call: dectoBin(7) =>  return  7 % 2 + 10 * dectoBin(7/2); => 1 + 10 * dectoBin(3);

2nd call: dectoBin(3) =>  return  3 % 2 + 10 * dectoBin(3/2); => 1 + 10 * dectoBin(1);

3rd call: dectoBin(1) =>  return  1 % 2 + 10 * dectoBin(1/2); => 1 + 10 * dectoBin(0);

4th call: dectoBin(0) =>  return  0; // base case 

评估所有这些

 dectoBin(7);
 7 % 2 + 10 * dectoBin(3);
 7 % 2 + 10 * ( 3 % 2 + 10 * dectoBin(1) );
 7 % 2 + 10 * ( 3 % 2 + 10 * ( 1 % 2 + 10 * dectoBin(0) ) );

dectoBin(0) 返回 0 所以,

  7 % 2 + 10 * ( 3 % 2 + 10 * ( 1 % 2 + 10 * 0 ) );
  7 % 2 + 10 * ( 3 % 2 + 10 * ( 1 ) );
  7 % 2 + 10 * ( 11 );
  7 % 2 + 110;
  1 + 110;
  111;

关于java - 解释逐步执行递归代码以在 Java 中将十进制转换为二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55805285/

相关文章:

java - 需要传context时传ActivityName.this和传this的区别

Python在二进制中找到最大组合数

Java.lang.NoSuchMethodError : org. json.JSONObject.put

java - 重命名日志文件程序[初学者]

java - 以静态方式创建对象

java - 使用 Java 的网页索引器

random - 伪随机二进制序列预测

java - image.getRGB(x,y) 的二进制 AND (&) 运算;

java - 编程问题 - 传真压缩

Java - 将 UTF-8 字符串转换为二进制的正确方法是什么?