1. 程式人生 > >C函式的呼叫-----遞迴呼叫

C函式的呼叫-----遞迴呼叫

遞迴呼叫(對記憶體的消耗是極大的)

概念:
一個函式在它的函式體內,呼叫它自身稱為遞迴呼叫,這種函式叫做遞迴函式
注意:
- 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

其實在我們擄程式碼的時候,很多情況下都是需要用到迭代的。這一塊的認識,對於我們降低程式碼量有大大的提高。