1. 程式人生 > >遞迴_演算法分析_指導性介紹

遞迴_演算法分析_指導性介紹

    遞迴演算法也即自身呼叫自身的演算法, 通常呼叫自身是為求解規模更小的子問題, 但是每次遞迴呼叫編譯器都要為之分配獨立的記憶體空間(主要是棧空間). 通常如果能用迴圈求解, 那麼不應使用遞迴, 因為遞迴在執行效率方面往往低於迴圈, 但是遞迴和迴圈均為一種強大的程式設計工具, 本人認為, 學演算法(包括刷題)的終極目的就是為了強化自己設計和分析演算法的能力, 而設計與分析演算法至少具備兩方面的能力, 第一: 熟練掌握常見演算法的具體形式, 第二: 能夠從數學角度, 給出嚴謹的演算法正確性證明和時間複雜度分析(有時還需要分析空間複雜度). 對於第二點, 我認為非常重要, 因此在我寫的部落格中, 如有必要, 我均會對演算法的正確性給出形式化證明(儘管有些人認為只需知道如何使用相關演算法,而無需分析演算法內在原理). 

    對於迴圈結構的證明, 我推崇且經常使用的做法是使用演算法導論一書中提出的迴圈不變式, 對於遞迴, 常見的做法是使用數學歸納法, 這是因為遞迴演算法往往也符合數學歸納法中的遞推結構, 在本分類下的多數博文中, 我會盡量給出每一個遞迴演算法的形式化證明, 具體採用的證明手段正是數學歸納法.