iT邦幫忙

2021 iThome 鐵人賽

DAY 30
1

最後一天,我想要用遞迴(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 天,我的分享也告一段落了,希望這些文章可以幫助到需要的讀者!


上一篇
【Day 29】函式(下)
系列文
C 語言的簡單入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言