C語言 之遞歸函數

今天來總結一下關於遞歸函數的使用方面的問題。

  遞歸函數就是在函數使用的時候自己調用自己,層層調用,來實現你想要的功能。

  有兩個最常用的例子,我們來寫一下。

  (1)計算階乘

#include <stdio.h>

int factorial(int n); // 函數聲明(階乘)


int main(void)

{

int a = 5;

printf("%d的階乘是:%d.\n", a, factorial(a));


return 0;

}

int factorial(int n)

{

if (n < 1)

{

printf("error.\n");

return -1;

}

if (n == 1)

{

return 1;

}

else

{

return (n * factorial(n-1));

}

}

  (2)斐波那契函數

#include <stdio.h>

int fibonacci(int n); // 函數聲明(斐波那契函數)

  int fibonacci(int n)  

{  

    if (n == 0) return    0;  

    if (n == 1) return    1;  

  

    return  fibonacci(n - 1) + fibonacci(n - 2);  

}  

int main(void)  

{  

    int a;

    printf("%d的斐波那契函數值爲%d",a,fibonacci(a));

    return   0;  

}  

第二個可能不太容易看明白,我們來分析一下

首先,這個假設一個數爲n , 

  第一次遞歸,f(n)=f(n-1)+f(n-2)

  第二次遞歸分爲兩個部分,

  f(n-1)=f(n-2)+f(n-3) f(n-2)=f(n-3)+f(n-4)

  第三次遞歸分爲四個部分……一直遞歸到0和1爲止。

  所以n==0或者n==1的時候返回一個常數很重要,要不然就會一直遞歸下去,直到觸發段錯誤。  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章