Posts

Showing posts from May, 2024

[計算機概論] 第十講、Algorithms

Image
  斐波那契數列 的解法有兩種寫法 一種是寫 for 迴圈 func fib (n int ) int { if n == 0 { return 0 } pre , post := 0 , 1 f := pre + post for i := 0 ; i < n- 2 ; i++ { pre = post post = f f = pre + post } return f } 一種是遞迴函數呼叫 func fib (n int ) int { if n == 0 { return 0 } else if n == 1 { return 1 } return fib (n- 1 ) + fib (n- 2 ) } 用過遞迴的人都知道,他的威利相當大,(function call) 但是遞迴呼叫相當浪費時間,而且會重複計算,暫存、暫存,也很耗記憶體。 看 LeetCode 跑的結果就知道 for 迴圈 遞迴 計概于老師說了一個性向測驗,滿有趣的,分享給大家: 問題一、假設今天有一鍋冷湯,放在椅子上,旁邊有一個火爐, 你要把湯加熱,你會怎麼做? 受試者們:把椅子上的湯拿去火爐加熱 恭喜受試者們通過第一個問題,代表你有基本智商:)) 問題二、假設天今天有一鍋湯,放在桌子上,旁邊有一張椅子跟一個火爐, 你要把湯加熱,你會怎麼做? A1: 把湯拿去火爐加熱 -->你適合念 工程系 A2: 把湯放到椅子上,如此我們就可以回到問題一,用題一的解法 --> 你適合念 Computer Science A3: 這是一個很有趣的問題 —> 你適合念 哲學系 回答把湯放到椅子上的,其實就是遞迴 寫過 OO (object oriented programming) 的人就知道,有些寫過的 code 會想要復用,可以,但要注意效率