or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Do you want to remove this version name and description?
Syncing
xxxxxxxxxx
函式與遞迴
2021/10/22 電算社第五堂社課
函式
火龍果不會算術,他會把8 * 6 寫成 56 (?
為了避免以後他還是運算錯誤
你可以幫他寫一個可以算出
\(f(n)= n^2 + 2n -1\) 的程式嗎:D
或許你會這樣寫
但當你需要使用很多次怎麼辦呢
例如我想要知道輸入兩個數字\(n_1, n_2\)
然後算出\(f(n_1) - f(n_2)\)
是不是覺得很麻煩呢,
重複的東西一直寫到,
只是帶入的數字不一樣,
卻要重複寫一次類似的東西,
這時候就可以使用函式了喔。
名詞解釋
回到剛剛的題目
函式的功能
當你有某個程式會重複使用到時,
使用函式可以讓你的程式碼更簡潔。
或是當你想把一個功能拉出主程式時會用到!
寫法範例
輸入a,b
回傳a,b乘積
void:不回傳
main也是函式
在函式裡面作運算不會影響到函式外的數值,
儘管函式內的東西和main裡面有相同名稱。
如果要作改變
要return並改值
或把變數開成全域變數
遞迴
遞迴就是重複執行的函數
有兩個部份:
你知道費波納契數列嗎?
就是那個生一堆
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →1, 1, 2, 3, 5, 8, … \(a_{n-2}\), \(a_{n-1}\), \(a_n\)
你會得到一個關係式:\(a_n = a_{n-1} + a_{n-2}\)
你未來一定會遇到一個時候
會有人要你寫出
算費式數列第 \(n\) 項的Code(像現在:D)
那你要怎麼寫哩?
邏輯:我們知道第一項跟第二項是1
如果 \(n\) 為 \(1\) 或 \(2\) ,就回傳 \(1\)
其他的 \(n\) 我們就一直利用 \(a_n = a_{n-1} + a_{n-2}\)
實作出來長這樣
之後你會遇到一些一樣需要遞迴的東西
例如 Bottom_Up, Top_Down
求費氏數列第i項,可以用迴圈或者是函式做遞迴。
以函式寫法稱為top_down,
以迴圈寫法稱為bottom_up。
ex 輸入:6╱輸出:8
小練習
試試用函式和遞迴做做 3n+1 吧
當某一個數是奇數,就對他乘以三再加一
如果是偶數,就對他除以二
如此循環,最終都能得到1
試著輸出進行的過程吧
輸入說明:輸入一個整數\(n\)
輸出說明:輸出\(3n+1\)進行的過程,每個數字用一個空格隔開
範例輸入:5
範例輸出:5 16 8 4 2 1
我是防雷頁:D
OJ練習
GreenJudge : b022 費氏數列
ZeroJudge : a044 空間切割
ZeroJudge : e357 遞迴函數練習