# 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班-函式"}
    165 views