# 函式 ### 函式 1 ```python def g (b): b = b * b return b a = 0 m = 5 a = g (m) if m < 10: a = g (m) + a else: a = g (m) print (a) ``` 輸出為何?(改寫自 [APCS 105 年 10 月 29 日觀念題](https://apcs.csie.ntnu.edu.tw/wp-content/uploads/2018/12/1051029APCSconcept.pdf) 20) ```python (A) 0 (B) 10 (C) 25 (D) 50 ``` ## 參數 ### 參數 1 ```python def f (a, b): a = a + b b = a - b a = ___ b = ___ f (a, b) print (a, b) ``` 空格填多少會讓程式輸出 ```10 5```?(改寫自 [APCS 11106 筆試](https://hackmd.io/@algoseacow/APCS11106-writing)) ```python (A) a = 5 b = 5 (B) a = 10 b = 5 (C) a = 5 b = 10 (D) a = 10 b = 10 ``` ### 參數 2 ```python def f (x, y): tmp = x x = y y = tmp x = 4 y = 3 f (x, y) v = (x - y) * (x + y) // 2 print (v) ``` 輸出為何?(改寫自 [APCS 11106 筆試](https://hackmd.io/@algoseacow/APCS11106-writing)) ``` (A) -4 (B) -3 (C) 3 (D) 4 ``` ## Scope (變數的) 視域 ### 視域 1 ```python x = 1 def f (): global x x = x + 3 print (x) def g (): x = 5 f () f () print (x) g () ``` 最後一個輸出的數字是什麼?(改寫自 [APCS 11106 筆試](https://hackmd.io/@algoseacow/APCS11106-writing)) ```python (A) 5 (B) 8 (C) 4 (D) 7 ``` ### 視域 2 ```python s = 1 def add (a): s = 6 while a >= 0: print (s, end=" ") # 印出 i 後印出一個空格,不換行下次 print 接著印 s = s + 1 print (s, end=" ") a = a - 1 print (s, end=" ") add (s) print (s, end=" ") s = 9 print (s, end=" ") ``` 輸出為何?(改寫自 [APCS 106 年 3 月 4 日觀念題](https://apcs.csie.ntnu.edu.tw/wp-content/uploads/2018/12/1060304APCSconcept.pdf) 8) ```python (A) 1 6 7 7 8 8 9 (B) 1 6 7 7 8 1 9 (C) 1 6 7 8 9 9 9 (D) 1 6 7 7 8 9 9 ``` ### 視域 3 ```python g1 = 30 g2 = 20 def f1 (v): g1 = 10 return g1 + v def f2 (v): global g1, g2 c = g2 v = v + c + g1 g1 = 10 c = 40 return v g2 = 0 g2 = f1 (g2) print (f2 (f2 (g2))) ``` 輸出為何?(改寫自 [APCS 106 年 3 月 4 日觀念題](https://apcs.csie.ntnu.edu.tw/wp-content/uploads/2018/12/1060304APCSconcept.pdf) 20) ```python (A) 70 (B) 80 (C) 100 (D) 190 ``` ## 遞迴 ### 遞迴 10 ```python def g (a): print (a, end=" ") # 印出 i 後印出一個空格,不換行下次 print 接著印 if a >= 3: return else: g (a + 1) print (a) g (1) ``` 輸出為何?(改寫自 [APCS 105 年 10 月 29 日觀念題](https://apcs.csie.ntnu.edu.tw/wp-content/uploads/2018/12/1051029APCSconcept.pdf) 18) ```python (A) 1 2 3 (B) 1 2 3 2 1 (C) 1 2 3 3 2 1 (D) 以上皆非 ``` ### 遞迴 20 ```python def f1 (i): if i < 10: f2 (i - 2) print (i, end=" ") # 印出 i 後印出一個空格,不換行下次 print 接著印 def f2 (i): if i > 0: print (i, end=" ") f1 (i - 1) f2 (9) ``` 輸出為何?(改寫自 [APCS 11106 筆試](https://hackmd.io/@algoseacow/APCS11106-writing)) ```python (A) 9 8 6 5 3 2 (B) 2 3 5 6 8 9 (C) 3 2 5 6 8 9 (D) 9 6 3 2 5 8 ``` ### 遞迴 30 ```python def f (i): if i < 8: i = i + 2 f (i) print (i, end=" ") # 印出 i 後印出一個空格,不換行下次 print 接著印 f (4) ``` 輸出為何?(改寫自 [APCS 11106 筆試](https://hackmd.io/@algoseacow/APCS11106-writing)) ```python (A) 8 6 (B) 6 8 (C) 4 6 8 (D) 8 6 4 ``` ### 遞迴 40 ```python def fun (n): if n > 0: print (n % 2) fun (n // 2) ``` ```fun (21)```會輸出什麼?(改寫自 [APCS 11101 筆試](https://hackmd.io/@algoseacow/APCS11101-writing?authuser=0)) ### 遞迴 50 ```python def f (n): if n <= 2: return 1 return f (n - 1) + f (n - 2) ``` ```f (6)```得到什麼?(改寫自 [APCS 11106 筆試](https://hackmd.io/@algoseacow/APCS11106-writing)) ```python (A) 3 (B) 5 (C) 8 (D) 13 ``` ### 遞迴 6 ```python=0 def sum (n): if n == 1: return 1 return n * (n - 1) + sum (n - 1) ``` 想用```sum (10)```計算 $1\times2 + 2\times3 + 3\times4 + ... + 9\times10$ 但定義```sum()```的程式碼有錯,應如何更改?(改寫自 [APCS 11106 筆試](https://hackmd.io/@algoseacow/APCS11106-writing)) (A) Line 2 要改成 ```return 0``` (B) Line 3 要改成 ```return (n - 1) * n + sum( n - 1)``` (C) Line 1 要改成 ```if n == 2:``` (D) 程式碼沒有錯 ### 遞迴 7 ```python def f (x): if x >= 101: return x - 10 return f (f (x + 11)) ``` 下列何者正確?(改寫自 [APCS 11106 筆試](https://hackmd.io/@algoseacow/APCS11106-writing)) ```python (A) f(4) = 91, f(89) = 91 (B) f(94) = 94, f(101) = 91 (C) f(4) = 101, f(89) = 89 (D) f(91) = 91, f(35) = 35 ``` ### 遞迴 8 ```python def f (i): if i < 8: i = i + 2 f (i) print (i, end=" ") # 印出 i 後印出一個空格,不換行下次 print 接著印 ``` 程式執行的輸出結果為下列何者?(改寫自 [APCS 11106 筆試](https://hackmd.io/@algoseacow/APCS11106-writing)) ```python (A) 8 6 (B) 6 8 (C) 4 6 8 (D) 8 6 4 ``` ### 遞迴 9 ```python def op3 (i, j): return i * j def op2 (g, h): return g * op3 (g, h) def op1 (e, f): return op2 (e, f) a = 1 b = 2 c = 1 d = 2 ``` 以下四個有幾種不同的值?(改寫自 [APCS 11106 筆試](https://hackmd.io/@algoseacow/APCS11106-writing)) ``` op1(op2(op3(b, d), c), a) op2(op3(op1(d, c), a), b) op3(op1(op2(c, a), d), b) op3(1, op1(op2(b, c), d)) (A) 1 (B) 2 (C) 3 (D) 4 ```