因此,这是在 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/