最後一天,我想要用遞迴(Recursion)來結束我們的三十天!
遞迴的觀念,其實就是讓一個函式可以呼叫自己以方便做一些運算。
還記得我們在前面寫過一個作業在寫階乘嗎?那時候我們用for
迴圈去做,那時候其實是用迭代(Iteration)的想法去做。
今天,我們利用遞迴再寫一次階乘!
先上程式碼:
#include<stdio.h>
int factorial(int n){
if(n==1)
return 1;
else
return n * factorial(n-1);
}
int main(){
int number;
printf("Please input a number A >>");
scanf("%d", &number);
printf("A! = %d", factorial(number));
return 0;
}
輸出結果:
我先把參考圖放上來,等等再解釋程式碼(為方便講解,參考圖是假設現在輸入為 3):
程式碼解說:
main()
的上面,就可以不用宣告函式!factorial()
,裡面的程式碼用 if
判斷,如果傳入參數 n
等於 1 ,就返回 1 ,若不是,則返回 n * factorial(n-1)
,而因為返回值裡面又去呼叫自身函數,所以其實只要 n
不等於 1 ,就會一直呼叫函數直到 n
的值為 1 為止,利用這個特性,我們就能計算階乘。不懂的讀者可以看上面附圖,不過那張圖為了方便解釋,是假設現在 n=3!printf()
,並呼叫我們寫的函式,就可以輸出我們要的答案了!其實,函式與遞迴觀念對以前的我來說,不是一個容易理解的東西!但多想、多寫就會越來越了解喔!
今天是輕鬆學 C 語言的第 30 天,我的分享也告一段落了,希望這些文章可以幫助到需要的讀者!