C函式的呼叫-----遞迴呼叫
阿新 • • 發佈:2019-01-07
遞迴呼叫(對記憶體的消耗是極大的)
概念:
一個函式在它的函式體內,呼叫它自身稱為遞迴呼叫,這種函式叫做遞迴函式
注意:
- C語言的函式中,支援執行時堆疊對遞迴函式的呼叫
- 在 遞迴呼叫的時候,主調函式又是被調函式,執行呼叫的過程就是其反覆呼叫自己的過程,每一次呼叫就會進入新的一層,在前一篇部落格中我們提到過,函式棧,那麼遞迴呼叫在呼叫自己的過程中,同樣也是會不斷開闢函式棧;
3.遞迴呼叫在呼叫自身進入下一層的時候,因為上一層佔用的棧空間其實是沒有進行釋放掉的,因此過多層次的遞迴的話,有可能會導致記憶體溢位的現象
遞迴呼叫的特性:
- 遞迴呼叫必須存在一定 的限制條件,當達到條件的時候,遞迴呼叫將不再繼續執行
- 每次呼叫之後,其最終的結果都是會接近該限制條件
應用:
資料夾 的遍歷刪除
求一個數的階乘等
下面通過一個例子演示一下最簡單的遞迴呼叫:
#include<stdio.h>
/**
* 猆波那契數,後面的數值是前面兩個數的和,
* 階乘
*/
long fabonacci_1(int num1);
long factorial_1(int num2);
int main(int argc,char * argv[]){
int num = 10;
int i = 1;
for(; i<= num;i++){
printf("element:%ld\n" ,fabonacci_1(i));
}
printf("factorial:%ld\n",factorial_1(num));
return 0;
}
long fabonacci_1(int num1){
if(num1 <= 2)
return 1;
return fabonacci_1(num1-1) +fabonacci_1(num1 - 2);
}
long factorial_1(int num2){
if(num2 <= 0){
return 1;
}else{
return num2 * factorial_1(num2 - 1);
}
}
對應的結果為:
element:1
element:1
element:2
element:3
element:5
element:8
element:13
element:21
element:34
element:55
factorial:3628800
其實在我們擄程式碼的時候,很多情況下都是需要用到迭代的。這一塊的認識,對於我們降低程式碼量有大大的提高。