開啟章節選單
回傳值
極為常見return 的用法
在之前的章節你已經學會了如何撰寫函式的功能,但計算完的數值總要存下來或回傳吧! return
這個語法的意思就是「回傳並離開函式」,他可以把參數回傳給原先呼叫函式的位置,同時結束函式的執行。也就是說 return
後的程式碼都不會被執行。
int apcs_level(int x) { // 一個自訂函式 return x; // 返回變數 x }
不過這邊要注意,return
回傳的型態要跟函式宣告的型態一致,否則會導致編譯錯誤。在這個例子中,函式 apcs_level
宣告的型態是 int
,所以 return
後面的變數也要是 int
型態。
一個函式中可以有很多 return
敘述句,但只會有一個被成功執行。像是下面的例子,會依據不同的數值範圍返回不同的數值,每一種返回值都可以是一個 return
敘述句,但只有第一個被執行到的會生效,執行後就跳出函式不會執行其他程式碼。
int apcs_level(int); int main() { apcs_level(150); // 傳遞的實作題分數 } int apcs_level(int x) { // 接收分數的變數 s if (0 <= x && x < 50) return 1; if (50 <= x && x < 150) return 2; if (150 <= x && x < 250) return 3; if (250 <= x && x < 350) return 4; if (350 <= x && x <= 400) return 5; return -1; }
接收回傳值
回傳的型態是在宣告函式時決定的,所以我們接受後若要進行運算或儲存就需要遵守對應的型態規則。我們假設有一個陣列用來儲存每次 APCS 考試的級分,我們可以這樣寫 :
int apcs[10]; int main() { for (int i = 0; i < 10; i++) { apcs[i] = apcs_level(150); // 將分數轉成級數 } }
我們可以想像程式執行完函式後會將函式替換成一個數值,接這就跟處理數值一樣賦值給 apcs 陣列進行儲存。當然也可以進行運算,這些都是依照題目需求去寫即可。
以下面這個例子來說:
int main() { cout << apcs_level(150) << endl; }
呼叫完函式後,就相當於將函式替換成一個數值:
int main() { cout << 3 << endl; }
遞迴函式
遞迴是程式中一個重要的概念,主要是函是自我呼叫產生的。常用來解決帶有一定規則的題目,而觀念題也時常出現遞迴的計算。
int gcd(int x, int y) { if (y == 0) return x; else return gcd(y, x % y); }
上面是一個計算最大公因數的遞迴函式,函式 gcd 會再次呼叫 gcd 的自我呼叫過程稱作遞迴。由於使用到遞迴的演算法許多都較深奧,因此這邊只需要知道這個概念即可,各種實際的應用會在之後更進階的章節提及。
小測驗
如果只呼叫一次函式,該函式最多可以執行幾次 return
語句?