資料結構中的尾遞迴


我們將在本文中瞭解什麼是尾遞迴。尾遞迴基本上是使用遞迴函式作為函式的最後一條語句。因此,當完成遞迴呼叫後無所事事,即稱為尾遞迴。我們來看一個尾遞迴的示例。

示例

 現場演示

#include <iostream>
using namespace std;
void printN(int n){
   if(n < 0){
      return;
   }
   cout << n << " ";
   printN(n - 1);
}
int main() {
   printN(10);
}

輸出

10 9 8 7 6 5 4 3 2 1 0

尾遞迴比非尾遞迴更好。由於在遞迴呼叫後沒有剩餘任務,因此編譯器可以更輕鬆地最佳化程式碼。呼叫一個函式時,其地址將儲存在堆疊中。因此,如果它是尾遞迴,則無需將地址儲存到堆疊中。

我們可以使用遞迴來計算階乘,但該函式不是尾遞迴。在 fact(n) 中使用了 fact(n-1) 的值。

long fact(int n){
   if(n <= 1)
      return 1;
   n * fact(n-1);
}

我們可以透過新增一些其他引數來使其成為尾遞迴。如下所示:

long fact(long n, long a){
   if(n == 0)
      return a;
   return fact(n-1, a*n);
}

更新於:2019 年 8 月 27 日

4K+ 次檢視

開啟你的 職業生涯

完成課程以獲得認證

開始
廣告
© . All rights reserved.