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

 斐波那契數列的解法有兩種寫法

一種是寫 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 會想要復用,可以,但要注意效率


Comments

Popular posts from this blog

《 Imgproxy 使用分析一:圖片下載速度優化分析:Akamai CDN vs Imgproxy 效能比較》

《 Akamai + S3 與 CloudFront + Imgproxy + S3 使用分析二:壓縮圖片設計流程:檔案大小 vs 載入時間的權衡》

程式語言初學者 Docker 入門第二章 —— 安裝與驗證 (Mac)