# 函式
### 函式 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
```