void printarray(int i) {
if (i == 0) {
return;
} else {
printarray(i - 1);
}
System.out.println("[" + (i - 1) + "]" + values[i - 1]);
}
它是一个使用递归打印数组的程序。任何人都可以告诉我上述方法是如何工作的?递归方法如何帮助打印阵列
void printarray(int i) {
if (i == 0) {
return;
} else {
printarray(i - 1);
}
System.out.println("[" + (i - 1) + "]" + values[i - 1]);
}
它是一个使用递归打印数组的程序。任何人都可以告诉我上述方法是如何工作的?递归方法如何帮助打印阵列
该方法打印的数组必须是名称为values
的实例或类变量。
初始给定索引未考虑在内。
该方法从最上面的索引处开始,并用一个减1的索引调用它自己。 当它到达索引0时,这是返回链的开始。 从递归调用返回后,将打印当前索引处的值 - 索引本身之后。
一个电话打印在下一个。 这些行从索引0开始,并停留在索引i - 1(用于初始调用的索引)。
更新:感谢@ Turing85我修复了我自己对打印索引的假设。
@ Turing85我想知道1件事情,如果我== 0它返回然后在最后一行我beomes的价值1.am我正确吗? –
@arunodaysingh我无法按照你的想法。如果达到“返回”,方法立即中止。从这一点来看,执行继续执行上面的一个调用堆栈,(最有可能是'printarray')。这个调用框架有自己的(旧)值'i',因为Java总是传递值。 – Turing85
@ Turing85非常感谢您的帮助。实际上,我忘记了价值的来电。我无法理解最后一行是如何从i = 1开始的。但是您的意见我能够理解。感谢您的帮助。 –
实施例中:i = 3 => printarray(3)
调试器可以是肯定的。进行笔纸测试。对每个新的print'print(...)'调用一张单独的纸张。 – Turing85
你是什么意思? –
在您正在使用的IDE中附加一个调试器,并检查每个步骤。 –