# Python班
## 12/15 社課
---
### 本次課程內容
* 功能型函式
* 運算型函式
* 遞迴函式
---
### 簡介函式
----
數學上的函式長得像這樣,
給他一個值,他就還你一個值
\\[\begin{align}
&f(x)=(x-1)(x^2+x-1)+3\\
&f(1)=3\\
&f(2)=8
\end{align}
\\]
----
而Python中的函式呢,我們這裡把它分成三種,
不過形式上都長得像這樣
```python=
def function():
...
function()
```
後面帶一個小括弧是函式的特徵
接下來將一一介紹
---
### 功能型函式
----
這種函式最好理解,只不過是把一串程式定義成另一個名詞,也就是說:
功能型函式可以理解為針對「程式」的「變數」
```python=
def Slogan():
print("Join YD, PTSD")
Slogan()
```
輸出:
```python=
Join YD, PTSD
```
---
### 運算型函式
----
函式不只能單純的「取代」一段程式,
它還能兼具輸入輸出的功能
----
想要輸入一個內容給函式,我們會這樣定義:
```python=
def function(x):
```
也可以不只一個輸入內容:
```python=
def f(a, b, c):
```
而輸出呢?
----
一樣有兩種
當然,你可以直接在函式裡用一個$\texttt{print}$
來快速達到輸出東西的目的
```python=
def f(a, b, c):
print(a**2 + b**2 + c**2)
```
但這就太小兒科了
----
運算型函數就是要帥一點,讓自己本身成為一個值
```python=
def f(a, b, c):
return a**2 + b**2 + c**2
```
新的東西出現了:$\texttt{return}$
他的意思就是把程式碼中的$\texttt{f(a,b,c)}$換成 \\(a^2 + b^2 + c^2\\)
----
一件有趣的事情:
如果你把兩種方式定義在同一個函數
```python=
def g(a, b, c):
print(a + b + c)
return a**2 + b**2 + c**2
print(g(1, 2, 3))
```
那程式會先執行$\texttt{print}$,之後才會把$\texttt{g(a, b, c)}$
代入$\texttt{return}$的值
----
輸出:
```python!
6
14
```
----
### 練習一
1. 在輸入一個正整數$N$後,請以$\texttt{for}$迴圈的方式,創建一個二維陣列,使得陣列長相如下:
$a = [[1, n], [2, n-1], \dots , [n, 1], [n+1, 0]]$
2. 請設計一個(運算型)函式$\texttt{f(h)}$,使得$\texttt{a[i]}$經過$\texttt{f(h)}$變換如下
$[j,\,k]\overset{f(i)}{\longrightarrow}[j\times k,\,k-1]$
---
### 2.遞迴
----
遞迴函式是一種自我呼叫的運算型函式
```python=
def f(x):
if x == 1: #終止條件
return 2
return f(x-1)*2
print(f(3))
```
\\[\begin{align}
&f(3)\\
=\, &f(2) \times 2 \\
=\, &f(1) \times 2 \times 2 \\
=\, &2 \times 2 \times 2 \times 2\\
=\, &16\end{align}
\\]
----
### 練習二
1. 以遞迴函式實作$n^n(n \in N)$計算器
2. 以遞迴函式實作$n!(n \in N)$計算器
{"description":"type: slidetitle","contributors":"[{\"id\":\"084e105f-92be-4605-b399-8d3c0ef40c64\",\"add\":3407,\"del\":1571}]","title":"112-1-Python班-函式"}