2017-05-23 78 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並返回