1. 程式人生 > 實用技巧 >遞推的演算法思想

遞推的演算法思想

遞推思想跟列舉思想一樣,都是接近人類思維方式的思想,甚至在實際生活具有比列舉思想更多的應用場景。人腦在遇到未知的問題時,大多數人第一直覺都會從積累的「先驗知識」出發,試圖從「已知」推導「未知」,從而解決問題,說服自己。

事實上,這就是一種遞推的演算法思想。遞推思想的核心就是從已知條件出發,逐步推算出問題的解。實現方式很像是初高中時我們的數學考卷上一連串的「因為」「所以」。那個時候還是用三個點來表示的。

而對於計算機而言,複雜的推導其實很難實現。計算機擅長的是執行高密度重複性高的工作,對於隨機性高變化多端的問題反而不好計算。相比之下,人腦在對不同維度的問題進行推導時具有更高的自由度。

比方說,人腦可以很容易的從「太陽從東邊升起」推出「太陽從西邊落下」,然後大致推出「現在的時間」。但是對於計算機而言並沒有那麼容易,你可能需要設定一系列的限制條件,才能避免計算機推出「太陽/月亮/星星」從「南/北/東邊」「落下/飛走/掉落」的可能性。

我說這個例子的用意是在說明,計算機在運用遞推思想時,大多都是重複性的推理。比方說,從「今天是1號」推出「明天是2號」。這種推理的結構十分類似,往往可以通過繼而往復的推理就可以得到最終的解。

遞推思想用圖解來表示可以參見下圖。每一次推導的結果可以作為下一次推導的的開始,這似乎跟迭代、遞迴的思想有點類似,不過遞推的範疇要更廣一些。

一文圖解弄懂八大常用演算法思想

案例

兔子問題。定一對大兔子每月能生一對小兔子,且每對新生的小兔子經過一個月可以長成一對大兔子,具備繁殖能力,如果不發生死亡,且每次均生下一雌一雄,問一年後共有多少對兔子?