Professional Documents
Culture Documents
計算機程式設計
Recursion &
DynamicProgramming
盧振華
2
函數的參數傳遞 - Pass by Value
int pass_by_value(int arg1, int arg2){
● 特點
○ Arguments(參數)會被複製
■ Callee 對 Arguments 的任何修改皆不影響 Caller
● 通常會需要 Return Value(回傳值)來與 Caller 互動
● 或修改 Global Variable(全域變數)
3
函數的參數傳遞 - Pass by Reference
void pass_by_reference(int &ans, int arg1, int 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 程式展⽰
世