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);
}
- 解說:
-
第一步 -> 第 15 行: 等待使用者傳入正整數,如使用者輸入 3 正整數。
-
第二步 -> 第 16 行: 呼叫factorial遞迴函數並傳入使用者輸入的 3 正整數。 -> 呼叫 factorial(3)
-
第三步 -> 第 3 至 10 行: 判斷傳入的值是否小於等於 1 ,如果為否將再次呼叫factorial遞迴函數 , 並將使用者傳入的值 3 減去 1 後傳入至函數內。 -> 呼叫 3 * factorial(2)
-
第四步 -> 第 3 至 10 行: 判斷傳入的值是否小於等於 1 ,如果為否將再次呼叫factorial遞迴函數 , 並將遞迴函數的值 2 減去 1 後傳入至函數內。 -> 呼叫 3 factorial(2) factorial(1)
-
第五步 -> 第 3 至 10 行:判斷傳入的值是否小於等於 1 ,如果為1 將回傳 1 數值。
-
第六步 -> 將所有的遞迴結果相乘: 3 2 1 後傳回給main()函式
- 實際執行:
小結:
遞迴函式與是比較接近電腦的思考方式,不過對人的思考比較複雜,所以遞迴函式大多使用for 迴圈取代。