遞歸是一種函數或方法中調用自身的編程技術,遞歸思想在於把大問題分解為小問題,進一步分解為更小的問題,直到每個小問題可以解決為止,也就是說,遞歸就是
用與自己相似但規模較小的問題來描述自己。
遞歸算法的三個特性:
1,求解規模為n的問題可以轉化為一個或多個結構相同規模較小的的問題,然后從這些較小的問題可以方便構造出大問題的解
2,遞歸調用的次數必須是有限的
3,遞歸必定有結束條件來終止遞歸,
遞歸的算法執行過程為遞推和遞歸兩個階段。在遞推階段,將規模為n的問題的求解遞推到比原來規模小的問題的求解,而且必須有終止遞歸的條件。在回歸階段,在獲得最簡單問題的解后,逐級返回,依次得到規模較大問題的解。遞歸算法無論是在空間還是時間上耗費量都比撲通算法要多,在算法設計時經常將遞歸算法轉化為非遞歸算法,轉化方法有以下3種:
1,通過分析跳過分解步驟,直接用循環結構來求值
2,用棧保存程序的運行過程,通過分析只保存必須保存的信息,從而利用非遞歸算法代替遞歸算法
3,利用棧保存參數,由於棧的后進先出的特性與遞歸算法的執行相吻合,因而可以用非遞歸算法代替遞歸算法