演算法入門——遞迴的理解
在計算機這個行業,特別是做演算法的萌新們,在學習演算法或者程式設計時都會遇到一個問題,那就是遞迴。對於遞迴,再書上通常就是這樣一句話,程式或者方法自己呼叫自己。萌新們的問題可能就出在這句話上了,那麼究竟什麼叫做自己呼叫自己呢?這怎麼個呼叫的方式呢?是把自己所有的程式碼再跑一次還是什麼呢?其實,要回答這幾個問題就要想明白這種呼叫對應什麼結構,然後有了清晰的結構自然就能夠明白這句話的具體內涵是什麼了。
為了找到這種結構,不妨構造一個程式碼段如下:
function(parameters)
{
if 退出條件 return
function(subparameters1)
function(subparameters2)
……
function(subparametersn)
}
那麼這段程式碼怎麼執行的呢?假設僅僅遞迴2次,在這裡將遞迴的程式碼展開就有如下的形式
function(subparameters2)
{
function(parameters)
{
if 退出條件 return
function(subparameters1)
{
if 退出條件 return function(subparameters2){
if 退出條件 return ……{
function(subparametersn){
if 退出條件 return { }
}
}
}
}
}
上面寫了一堆的“{}”可能把你繞暈了,現在咱們就一起來從上面這個程式碼的括號結構來尋找我們要的結構,看看這一層一層的括號似乎和Windows的資料夾一層層的開啟方式類似,是的你沒有看錯的確是這樣。就像你在開啟電腦在不同的資料夾內溜達,結果到底了還是沒有找到你想要的東東,(這兒假如你我們沒有意見回到根目錄的快捷方式),那麼,你是不是得一層一層的回到上一層目錄呢?是的就是這樣。你會說,廢話這和遞迴有啥關係呀?好親們,我們看看上面我貼上的一堆的括號是不是和我們找東西的時候沒找到回到根目錄類似呢?對的,你真聰明,的確是這樣的。那麼想一想,Windows的的檔案是按照什麼結構組織的呢?對的是樹形結構。好找到這個結構有興趣的同志們在次體會一下遞迴吧!
(歡迎留言批評指正!)