【发布时间】:2019-09-29 19:29:22
【问题描述】:
我正在使用 java 中的递归构建一个英文标尺。在使用drawRuler函数绘制刻度时,我遇到了一个问题,当值为0时,控件将如何执行以下语句。我的基本条件是: if(centalLength >= 1) 并且递归调用位于此控制语句中。在 drawInterval(centralLength - 1) 中面临问题。任何人都可以提供帮助,我想了解在满足基本案例后会做什么。
public static void drawRuler(int nInches, int majorLength) {
drawLine(majorLength, 0);
for(int j = 1; j <= nInches; j++) {
drawInterval(majorLength - 1);
drawLine(majorLength, j);
}
}
private static void drawInterval(int centralLength) {
if (centralLength >= 1) {
drawInterval(centralLength - 1);
drawLine(centralLength);
drawInterval(centralLength - 1);
}
}
private static void drawLine(int tickLength, int tickLabel) {
for (int j = 0; j < tickLength; j++)
System.out.print("-");
if (tickLabel >= 0)
System.out.print(" " + tickLabel);
System.out.print("\n");
}
private static void drawLine(int tickLength) {
drawLine(tickLength, -1);
}
代码没有错误。我想了解在满足基本条件后接下来的语句将如何执行。
【问题讨论】:
-
当 centralLength 等于 0 时满足基本情况。任何满足基本情况的对 drawInterval 的递归调用,即使用参数 centralLength=0 调用将立即返回到调用方法。
-
drawInterval()方法中,当if(0 >= 1)条件为false时,drawLine(centralLength - 1)如何执行???
-
它没有。如果您使用 centralLength=0 调用 drawLine,则递归调用停止并返回。使用 centralLength=1 调用 drawInterval 将调用 drawInterval(0),它立即返回,然后调用 drawLine(0),它打印出一些内容并返回,然后再次调用 drawInterval(0),它立即返回。
-
@Martin'sRun 你说的 drawInterval(0) 会立即返回,我的问题是当这个语句执行 drawInterval(centralLength - 1); ?如果你把 0 放进去,如果 (0 >= 1) 则 if 条件为假。
标签: java recursion data-structures