任何人都可以解释一下递归循环的打印顺序吗?
import java.util.Scanner;
public class DecimalToBinary {
static Scanner console = new Scanner(System.in);
public static void main(String[] args) {
int decimalNum;
int base;
base = 2;
System.out.println("Enter a nonnegative integer in decimal: ");
decimalNum = console.nextInt();
System.out.println();
System.out.println("Decimal " + decimalNum + " = ");
decToBin(decimalNum, base);
System.out.println(" binary");
}
public static void decToBin(int num, int base) {
if (num == 0) {
System.out.print(0);
} else if (num > 0) {
decToBin(num / base, base);
System.out.print(num % base);
}
}
}
Num % base
必须按照以下方式打印相反的顺序:
为什么显示的通话顺序如何? (请帮我修改我的问题,英语是我的外语)
答案 0 :(得分:3)
您的打印在递归后发生。以(25,2)为例,打印调用的顺序如下所示
decToBin(25, 2):
decToBin(12,2):
decToBin(6,2):
decToBin(3,2):
decToBin(1,2):
decToBin(0,2):
print(0)
print(1%2)
print(3%2)
print(6%2)
print(12%2)
print(25%2)
删除递归调用并离开print语句会显示您获得的顺序:
decToBin(25, 2):
print(0)
print(1%2)
print(3%2)
print(6%2)
print(12%2)
print(25%2)
如果您希望打印的顺序相反,请在递归调用之前移动打印语句:
public static void decToBin(int num, int base) {
if (num == 0) {
System.out.print(0);
} else if (num > 0) {
System.out.print(num % base);
decToBin(num / base, base);
}
}
打印时的新递归:
decToBin(25, 2):
print(25%2)
decToBin(12,2):
print(12%2)
decToBin(6,2):
print(6%2)
decToBin(3,2):
print(3%2)
decToBin(1,2):
print(1%2)
decToBin(0,2):
print(0)
新输出:
decToBin(25, 2):
print(25%2)
print(12%2)
print(6%2)
print(3%2)
print(1%2)
print(0)
答案 1 :(得分:1)
输出的顺序颠倒过来 因为一旦调用了dectobin函数
decToBin(int num, int base) {
if (num == 0) {
System.out.print(0);
} else if (num > 0) {
它到达
行 decToBin(num / base, base);
在有机会输出任何内容之前,它会推迟执行并调用dectobin函数的“另一个实例”并减少数字参数(在下面的代码中)
System.out.print(num % base);
}
然后这个后续的dectobin调用在同一行停止,另一个“实例”以更小的数量启动。等等等等。到目前为止,没有一个“实例”有机会打印任何东西。
在某个时刻,最后启动的函数的“实例”识别出它 num参数在值1下减少;并且由于num是整数类型,一旦它是正数但小于1,它将“Rounded”为0.因此以下条件为真:
if (num == 0) {
System.out.print(0);
然后这个最后一个实例的行为与其前任实例不同。而不是推迟执行并创建一个新的“实例”,它在上面的行中打印“0”,然后结束将执行点返回到一个“实例”,该实例调用它,然后继续从它被推迟的行开始运行。 然后这个“实例”输出它的数字
system.out.print(num % base);
并结束自己将执行返回到启动它的那个。等等。
底线是:最后开始的函数“instance”有第一个输出。首先启动的函数有最后一个