loop、iterate、traversal和recursion這幾個詞是計算機技術書中經常會出現的幾個詞匯。眾所周知,這幾個詞分別翻譯 為:循環、迭代、遍歷和遞歸。乍一看,這幾個詞好像都與重復(repeat)有關,但有的又好像不完全是重復的意思。那么這幾個詞到底各是什么含義,有什么區別和聯系呢?下面就試着解釋一下。
1,循環(loop),指的是在滿足條件的情況下,重復執行同一段代碼。比如,while語句。 循環則技能對應集合,列表,數組等,也能對執行代碼進行操作。
2,迭代(iterate),指的是按照某種順序逐個訪問列表中的每一項。比如,for語句。 迭代只能對應集合,列表,數組等。不能對執行代碼進行迭代。
3,遍歷(traversal),指的是按照一定的規則訪問樹形結構中的每個節點,而且每個節點都只訪問一次。 遍歷同迭代一樣,也不能對執行代碼進行遍歷。
4,遞歸(recursion),指的是一個函數不斷調用自身的行為。比如,以編程方式輸出著名的斐波納契數列(http://www.cnblogs.com/feichengwulai/articles/3587848.html中第1題就有用遞歸方法輸出斐波那契數列解題。20-23,41題都用遞歸,41題進行了詳細的解釋!!!)。
(1),通俗的解釋:遞歸就像往存錢罐里存錢,先往里邊塞錢,2塊,5塊,10塊這樣的塞,叫入棧。取錢的時候,后塞進去的先取出來,這叫出棧。具體多少錢,要全部出棧才知道。
(2),遞歸分類:線性遞歸和尾遞歸。
那么兩種遞歸有什么區別呢?看上邊網址中的41題,里邊有線性遞歸和尾遞歸的對比實例應用和區別解釋。