You are on page 1of 13

10930EECS111100

計算機程式設計
Recursion &
DynamicProgramming
盧振華

(Week 04) 27.JUL.2021


綱要
● 函數的參數(Arguments)傳遞(Passing)
○ Pass by Value
○ Pass by Reference
○ Pass by Array
● Recursion 遞迴
○ 定義
○ 形式
○ Non-branched 無分支的遞迴
○ Branch 分支
■ Divide & Conquer 分治法
● Dynamic Programming 動態規劃

2
函數的參數傳遞 - Pass by Value
int pass_by_value(int arg1, int arg2){

return arg1 + arg2 ;

● 特點
○ Arguments(參數)會被複製
■ Callee 對 Arguments 的任何修改皆不影響 Caller
● 通常會需要 Return Value(回傳值)來與 Caller 互動
● 或修改 Global Variable(全域變數)

3
函數的參數傳遞 - Pass by Reference
void pass_by_reference(int &ans, int arg1, int arg2){

ans = arg1 + arg2 ;

● 特點
○ Arguments(參數)不被複製
■ Callee 對 Arguments 的任何修改直接影響 Caller
● 不一定需要 Return Value(回傳值)來與 Caller 互動
● 可將欲修改的變數,直接透過 Reference 機制修改
■ 讓 void function 更像將 caller 的程式碼提出

4
函數的參數傳遞 - Pass by Array
void pass_by_array(int arg1[9][2], int arg2){
arg1[arg2][0] += arg1[arg2][1] ;
}
● 特點
○ Arguments(參數)不被複製
■ Callee 對 Arguments 的任何修改直接影響 Caller
● 與 pass by reference 類似
■ 需要指定陣列尺寸
● 最高維度可以省略
● 補充資訊
○ 實際上是 Pass by Address 的變形
■ 期末考的範圍

5
函數的參數傳遞 - struct 的運用
struct Array{

char str[1024] ;

uint32_t begin ;

} ;

● 作用
○ 作為 pass by value 的 argument 時:
l D rg
● 被打包的 member variables 都會被複製,任意修改都不影響 caller。

6
函數的參數傳遞 - struct 的運用
struct Array{

char str[1024] ;

uint32_t begin ;

} ;

● 作用
○ 作為 return value:
( )
■ 以一個 return value 打包多個 return values

7
函數的參數傳遞 - struct 的運用
struct Array{

char str[1024] ;

uint32_t begin ;

} ;

● 作用
○ 作為 pass by reference 的 argument 時:
■ member variables 不被複製,有加速之效果。
■ 可以作為修改 caller variables 的介面

8
出 殿 美 dmge
出發點可以⼀直改變
Recursion 遞迴 - 定義
⾃⼰ 呼叫 ⾃⼰ =
) recarsāon
● A function calls itself from within its own code.

河內塔
9
消耗 記憶体 」 Runtimeerron

⽬前 电腦系統

(Recursion) 遞迴 - 形式
● t Base Cases

)
遞迴關係的終止以免無窮無盡
有效定義終⽌條件,

■ 非常重要
○ Example:
■ F0 = 1
■ F1 = 1
● Recursive Step
○ 遞迴的推演
■☆通常有單一方向性
○ Example:
■ c Fn = Fn-1 + Fn-2,

⺠來 越 ⼩

single direction
10
Recursion 遞迴 - Non-branched
● Tutorials:
a. Print An Array
b. Factorial 階乘
c. GCD
d. Exponentiation 指數

11
7127 note 程式展⽰

You might also like