遞迴的型別

遞迴可以分為頭遞迴尾遞迴,具體取決於遞迴方法呼叫的放置位置。

頭遞迴中,遞迴呼叫在它發生時,在函式中的其他處理之前(想想它發生在函式的頂部或頭部)。

尾遞迴中,它是相反的 - 處理髮生在遞迴呼叫之前。在兩種遞迴樣式之間進行選擇可能看似隨意,但選擇可能會產生重大影響。

在路徑開頭具有單個遞迴呼叫的路徑的函式使用所謂的頭遞迴。先前展覽的階乘函式使用頭部遞迴。一旦確定需要遞迴,它首先要做的是用遞減的引數呼叫自身。在路徑末尾具有單個遞迴呼叫的函式使用尾遞迴。

public void tail(int n)              public void head(int n)
{                                       {
   if(n == 1)                             if(n == 0)
      return;                                return;
   else                                   else
      System.out.println(n);                 head(n-1);

   tail(n-1);                              System.out.println(n);
}                                        }

如果遞迴呼叫發生在方法的末尾,則稱為 tail recursion。尾遞迴是 similar to a loopmethod executes all the statements before jumping into the next recursive call

如果遞迴呼叫發生在 beginning of a method, it is called a head recursionmethod saves the state before jumping into the next recursive call

參考: 頭尾遞迴的區別