C 程式中使用遞迴函式的輔助空間?
接下來,我們將瞭解遞迴函式呼叫需要哪些輔助空間。遞迴函式呼叫與正常函式呼叫有何不同?
假設我們有一個函式如下 −
long fact(int n){ if(n == 0 || n == 1) return 1; return n * fact(n-1); }
這是一個遞迴函式。我們用 fact(5) 呼叫它時,它將在棧中儲存地址,如下所示 −
fact(5) ---> fact(4) ---> fact(3) ---> fact(2) ---> fact(1)
由於遞迴函式會不斷地自己呼叫自己,所以地址被新增到棧中。因此,如果一個函式被遞迴呼叫 n 次,它將佔用 O(n) 的輔助空間。但這並不意味著如果一個普通函式被呼叫 n 次,它的空間複雜度就是 O(n)。對於普通函式,當它被呼叫時,該地址會被推入到棧中。當它完成後,它會從棧中彈出該地址並返回到呼叫方函式中。然後再次呼叫它。因此,其空間複雜度為 O(1)。
廣告