資料結構中的遞迴原理
遞迴是一個函式呼叫自身的程序。我們使用遞迴將更大的問題分解成更小的子問題。需要注意的是,只有當每個子問題都遵循相同型別的模式時,我們才能使用遞迴方法。
一個遞迴函式有兩個不同的部分:基本情況和遞迴情況。基本情況用於終止遞迴任務。如果未定義基本情況,則函式將無限次遞迴(理論上)。
在計算機程式中,當我們呼叫一個函式時,程式計數器的值會在跳轉到函式區域之前儲存到內部堆疊中。完成任務後,它會彈出地址並將其分配給程式計數器,然後恢復任務。在遞迴呼叫期間,它會多次儲存地址,並跳轉到下一個函式呼叫語句。如果未定義基本情況,它將反覆遞迴,並將地址儲存到堆疊中。如果堆疊沒有更多空間,它將引發“內部堆疊溢位”錯誤。
遞迴呼叫的一個例子是查詢一個數字的階乘。我們可以看到,一個數 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
廣告