當你解決乙個問題的時候,如果能夠遞迴,你可能很快就寫出乙個簡潔的程式。每當我們對自己新想出來的遞迴或迭代演算法自我陶醉的時候,是否想過還有更加高效的演算法?
其實大多數遞迴或迭代的問題都能轉化為非遞迴演算法。更厲害的演算法複雜度可以降到o(1)。不信請看下面例子。
(1)乙隻青蛙一次可以跳上 1 級台階,也可以跳上2 級。求該青蛙跳上乙個n 級的台階總共有多少種跳法。
(2)乙隻青蛙一次可以跳上1級台階,也可以跳上2 級……它也可以跳上n 級,此時該青蛙跳上乙個n級的台階總共有多少種跳法?
毋庸置疑,第乙個不就是斐波那契數列麼。難道我們又要遞迴或者迭代了嗎?那麼第二個呢?要知道遞迴付出的時間是慘重的!其實很多遞推公式都可以解成關於n的函式,這個在組合數學這門課中會詳細介紹。
附上上面兩個問題的**:
double fib(int n) double nb_fib(int n)
所以以後在遇到遞迴和迭代的時候,首先想想是否可解。切莫直接遞迴啊!
你還在兜圈嗎?
可能在我們每個人的人生路途中,一開始都是在兜圈,每次過完一年後只是單純地回到了起點。只有在領悟到這一點後,才知道要找到一條離開的路,然後不管是筆直地還是彎彎曲曲地向著目標前進,這樣的人生才是有意義的。也許每個人最大的不同就是領悟的早晚,可能有的人一開始就悟到了,比你早出發了幾年,十幾年。也可能有的人...
你還在 Select 嗎?
應用程式慢如牛,原因多多,可能是網路的原因 可能是系統架構的原因,還有可能是資料庫的原因。那麼如何提高資料庫sql語句執行速度呢?有人會說效能調優是資料庫管理員 dba 的事,然而效能調優跟程式設計師們也有莫大的關係。程式中嵌入的一行行的sql語句,如果使用了一些優化小技巧,定能達到事半功倍的效果。...
你還在寫controller嗎
傳統的三層架構 目前常見的web開發基本是這個架構,其中比重最大的是service層,dal層基本依賴於mybatis等框架解放了出來,其實controller層對於我們來說意義也是不大的,所以本期打算實現乙個類似閘道器的框架。好處 框架設計 實現 自定義註解 target retention re...