資料結構中的遞迴原理


遞迴是一個函式呼叫自身的程序。我們使用遞迴將更大的問題分解成更小的子問題。需要注意的是,只有當每個子問題都遵循相同型別的模式時,我們才能使用遞迴方法。

一個遞迴函式有兩個不同的部分:基本情況和遞迴情況。基本情況用於終止遞迴任務。如果未定義基本情況,則函式將無限次遞迴(理論上)。

在計算機程式中,當我們呼叫一個函式時,程式計數器的值會在跳轉到函式區域之前儲存到內部堆疊中。完成任務後,它會彈出地址並將其分配給程式計數器,然後恢復任務。在遞迴呼叫期間,它會多次儲存地址,並跳轉到下一個函式呼叫語句。如果未定義基本情況,它將反覆遞迴,並將地址儲存到堆疊中。如果堆疊沒有更多空間,它將引發“內部堆疊溢位”錯誤。

遞迴呼叫的一個例子是查詢一個數字的階乘。我們可以看到,一個數 n 的階乘 n! 等於 n * (n-1)!,又等於 n * (n - 1) * (n - 2)!。因此,如果階乘是一個函式,那麼它將被反覆呼叫,但引數會減少 1。當引數為 1 或 0 時,它將返回 1。這可以是遞迴的基本情況。

示例

 線上演示

#include<iostream>
using namespace std;
long fact(long n){
   if(n <= 1)
   return 1;
   return n * fact(n-1);
}
main(){
   cout << "Factorial of 6: " << fact(6);
}

輸出

Factorial of 6: 720

更新於:2019年8月26日

3K+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告