遞迴
函式
做一件事,有個迴傳值
數學上的遞迴
定義跟小一點的自己有關
階乘 \(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\) 個的移到正確位置