遞迴
函式
- 做一件事,有個迴傳值
數學上的遞迴
- 定義跟小一點的自己有關
- 階乘 \(fact(N) = \begin{cases}N \times fact(N-1), \text{ if } N > 1 \\ 1\end{cases}\)
int fact(int N){
if (N > 1){
return N * fact(N-1);
}
else{
return 1;
}
}
函式上的遞迴
- 一件事很難做
- 拆成小一點的事情
- 有點抽象?
- 那是確實
Fibonacci(費波那契數列)
- \(Fib(N) = \begin{cases}Fib(N-1) + Fib(N-2), \text{if } N > 2 \\ 1\end{cases}\)
練習
考拉茲猜想
- \(c(N) = \begin{cases}c(\frac{N}{2}), &\text{if } N \text{ is even.} \\ c(3N+1), &\text{if }N\text{ is odd.}\end{cases}\)
- 考拉茲猜想 (Collatz Conjecture) 宣稱:這個遞迴函數一定會進入 \(\dots, 1, 4, 2, 1, \dots\) 的循環。
考拉茲猜想
- 用程式來驗證看看
考拉茲猜想
- 用程式來驗證看看
- \(2^{68}\) 以下的數都被驗證過成立了
- 不足以證明這個猜想的正確性
遞迴的必要成分
- 終止條件!

遞迴的必要成分
- 往下一步的轉移

遞迴的必要成分
- 適當的路線
- 終止條件
遞迴大魔王
- 河內塔
- 玩玩看
只有一個碟子?
- 移動一格
兩個碟子?
- 先把上面的移開
- 下面的移到正確位置
- 上面的移到正確位置
三個碟子?
- 先把上面兩個移開
- 下面的移到正確位置
- 上面兩個的移到正確位置
\(N\) 個碟子?
- 先把上面 \(N-1\) 個移開
- 下面的移到正確位置
- 上面 \(N-1\) 個的移到正確位置
遞迴
By yungyao
遞迴
- 37