奧林匹亞資訊班
10/4
講師:吳崇維(wayne)
遞迴
recursion
遞迴 recursion
遞迴最基礎的定義就是在
自己的函式裡面呼叫 (call)自己
這樣可以造成同一個函式裡面
不斷去呼叫相同函式的效果。
像是看著兩面在前與後的鏡子,會看到無窮多個人,一樣的道理
理解函式:
void func(int x);
----------
此函式接收一個整數參數
將整數參數的值印出來
若此值為0 => 回傳 (終止條件)
否則處理func(x-1);
回傳
如果main() call func(2) ...
func(2) 接到一個x=2的參數
func(2) 印出 2 並換行
func(2) call func(1)
func(1) 接到一個x=1的參數
func(1) 印出 1 並換行
func(1) call func(0)
func(0) 接到一個x=0的參數
func(0) 印出 0 並換行
func(0) 進入 if 並且 return;
func(1) return;
func(2) return;
回到main()
遞迴的重重重點
一定要有終止條件!!!
一定要有終止條件!!!
一定要有終止條件!!!
如果沒有終止條件,就會造成遞迴無限的執行下去
迴圈的終止條件
遞迴的終止條件
遞迴的終止條件
在自己電腦上打看看
記得要按
ctrl + c 或ctrl + z
結束程式XD
差別在哪?影響又是什麼呢?
Practice
先給你一個整數 n 代表陣列長度,再給你陣列值
Ex :
4
1 2 5 9
請你計算有多少種數字可以被這個陣列裡的數字組合出來?
解析: 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15,16, 17 => 15種
-------------------------------------------------------------------------------
Ex :
3
1 2 3
共有 : 1, 2, 3, 4, 5, 6 => 6種
Practice!
給你一個整數 n
請你輸出~
1+2+4+5+7+8+10 ... + n (3的倍數不加)
並且!
不能使用迴圈指令 : (while, for ... 等等)
只能使用遞迴!
Ex : n = 10
輸出 = 37
Homework!
給你一個整數 n
請你輸出~
1 + 1+2 + 1+2+3 + 1+2+3+4 + 1+2+3+4+5 ... 的值
並且!
不能使用迴圈指令 : (while, for ... 等等)
只能使用遞迴!
Ex : n = 3
輸出 = 10
Hint : 你可能需要兩種遞迴式
FeedBack!
一起努力快樂寫程式吧!
10/4 遞迴 & more
By Wayne Wu
10/4 遞迴 & more
- 79