資料結構中的尾遞迴
我們將在本文中瞭解什麼是尾遞迴。尾遞迴基本上是使用遞迴函式作為函式的最後一條語句。因此,當完成遞迴呼叫後無所事事,即稱為尾遞迴。我們來看一個尾遞迴的示例。
示例
#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);
}
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP