Zero to Hero – C訓練營(part 6)-函式遞迴

函式遞迴??這個是一個很詭異的事情,有點像是夢裡夢到自己在做夢,不斷的往下無限延伸…如果沒有喊停止會一直持續到永久,不過對電腦來說最多就是達到記憶體上限就會被強制終止了~~

正整數的階乘(英語:factorial)計為n!

EX. 例如5的階乘計為5!,其值為120( 5 4 3 2 1 = 120)

  • 程式範例:
#include <stdio.h>

long int factorial(long int num){
    if (num <= 1){
        return 1;
    }
    else{
        return num * factorial(num - 1);
    }
}

int main() {
    long int number;
    printf("Please Enter the Number: ");
    scanf("%ld",&number);
    number = factorial(number);
    printf("ANS: %ld\n",number);
}
  • 解說:

  1. 第一步 -> 第 15 行: 等待使用者傳入正整數,如使用者輸入 3 正整數。

  2. 第二步 -> 第 16 行: 呼叫factorial遞迴函數並傳入使用者輸入的 3 正整數。 -> 呼叫 factorial(3)

  3. 第三步 -> 第 3 至 10 行: 判斷傳入的值是否小於等於 1 ,如果為否將再次呼叫factorial遞迴函數 , 並將使用者傳入的值 3 減去 1 後傳入至函數內。 -> 呼叫 3 * factorial(2)

  4. 第四步 -> 第 3 至 10 行: 判斷傳入的值是否小於等於 1 ,如果為否將再次呼叫factorial遞迴函數 , 並將遞迴函數的值 2 減去 1 後傳入至函數內。 -> 呼叫 3 factorial(2) factorial(1)

  5. 第五步 -> 第 3 至 10 行:判斷傳入的值是否小於等於 1 ,如果為1 將回傳 1 數值。

  6. 第六步 -> 將所有的遞迴結果相乘: 3 2 1 後傳回給main()函式

  • 實際執行:

小結:

遞迴函式與是比較接近電腦的思考方式,不過對人的思考比較複雜,所以遞迴函式大多使用for 迴圈取代。

Similar Posts

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。