Java學習之理解遞迴

忘塵天外天發表於2017-08-01

  Java支援遞迴。遞迴是根據自身定義內容的過程。就Java程式設計而言,遞迴是一個允許方法呼叫自身的特性。呼叫自身的方法被稱為遞迴。典型的例子就是階乘的計算,N的階乘就是從1到N之間所有整數的乘積。

  當方法呼叫自身時,在堆疊上為新的區域性變數和引數分配記憶體,並使用這些新的變數從頭開始執行方法的程式碼。當每次遞迴呼叫返回時,將舊的區域性變數和引數從堆疊中移除,並將執行控制恢復到方法內部的呼叫點。遞迴方法被稱為“望遠鏡式”的方法,可以自由伸縮。

  許多例程的遞迴版本,它們的執行速度比與之等價的迭代版本要更慢一些,因為增加額外的函式呼叫負擔。對方法進行大量的遞迴呼叫可能會導致堆疊溢位。因為區域性變數和引數儲存在堆疊中,並且每次新的呼叫都會建立這些變數新的副本,所以可能會耗盡堆疊。

  遞迴方法的主要優點是,對於某些演算法,使用遞迴可以建立出比迭代版本更清晰並且更簡單的版本。像使用迭代方式實現QuickSort演算法非常困難,以及某些與人工智慧相關的演算法,使用遞迴方案最容易實現。

  當編寫遞迴方法時,在某個地方必須有一條if語句,用於強制方法返回而不再執行遞迴呼叫。如果沒有這麼做,一旦呼叫該方法,就永遠不會返回。

相關文章