2017-05-23 45 views
-4
void printarray(int i) { 
    if (i == 0) { 
     return; 
    } else { 
     printarray(i - 1); 
    } 
    System.out.println("[" + (i - 1) + "]" + values[i - 1]); 
} 

它是一个使用递归打印数组的程序。任何人都可以告诉我上述方法是如何工作的?递归方法如何帮助打印阵列

+7

调试器可以是肯定的。进行笔纸测试。对每个新的print'print(...)'调用一张单独的纸张。 – Turing85

+2

你是什么意思? –

+0

在您正在使用的IDE中附加一个调试器,并检查每个步骤。 –

回答

1

该方法打印的数组必须是名称为values的实例或类变量。

初始给定索引未考虑在内。

该方法从最上面的索引处开始,并用一个减1的索引调用它自己。 当它到达索引0时,这是返回链的开始。 从递归调用返回后,将打印当前索引处的值 - 索引本身之后。

一个电话打印在下一个。 这些行从索引0开始,并停留在索引i - 1(用于初始调用的索引)。

更新:感谢@ Turing85我修复了我自己对打印索引的假设。

+2

@ Turing85我想知道1件事情,如果我== 0它返回然后在最后一行我beomes的价值1.am我正确吗? –

+0

@arunodaysingh我无法按照你的想法。如果达到“返回”,方法立即中止。从这一点来看,执行继续执行上面的一个调用堆栈,(最有可能是'printarray')。这个调用框架有自己的(旧)值'i',因为Java总是传递值。 – Turing85

+2

@ Turing85非常感谢您的帮助。实际上,我忘记了价值的来电。我无法理解最后一行是如何从i = 1开始的。但是您的意见我能够理解。感谢您的帮助。 –

0

实施例中:i = 3 => printarray(3)

  • else块是活动的:printarray(2)
  • else块是活动的:printarray(1)
  • else块是活动的: printarray(0)
  • 如果块是有效的,因为I = 0并返回