遞迴

函式

  • 做一件事,有個迴傳值

數學上的遞迴

  • 定義跟小一點的自己有關
  • 階乘 \(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