摘要:本文根據作者多年的教學和軟件開發經驗,從遞歸的定義出發,通過對一個匯編語言遞歸子程序的剖析,詳細分析了遞歸調用在類推和返回過程中堆棧的變化,從匯編語言的角度討論了遞歸的本質和特點,這對學生正確理解和應用遞歸解決實際問題有很好的參考價值。
關鍵詞:匯編語言;遞歸;堆棧;子程序;嵌套調用
中圖分類號:G642文獻標識碼:B
匯編語言是一種低級語言,是機器指令的符號化表示,描述了機器最終要執行的指令序列,也是人與機器最直接的溝通語言。高級語言大都編譯為匯編指令,最終轉化為機器指令得以執行,從編譯器的角度,也就是從匯編語言的角度討論遞歸,既有助于透徹的理解高級語言的核心原理,又能明晰程序內部的執行過程,更重要的是能夠獲得直接從底層分析問題解決問題的能力,從而真正理解和掌握遞歸算法。
1遞歸的本質
一個對象部分地由它自己組成,或者是按它自己定義,則稱為是遞歸的。遞歸是一種描述問題的方法,或稱算法。遞歸的思想可以簡單地描述為“自己調用自己”。例如用如下方法定義階乘:
n!=n*(n-1)!(n>1)
可以看出是用階乘定義階乘,這種自己定義自己的方法稱為遞歸定義。
又如,數學中對自然數的定義:
(1)1是自然數;
(2) 自然數的后繼是自然數;
也是典型的遞歸定義,遞歸的能力在于有可能用有限的語句來定義對象的無限集合。采用遞歸算法解決問題必須符合以下三個條件:(1)可以把要解決的問題轉化為一個新的問題,而這個新問題的解決方法與原來的解決方法相同,只是所處理的對象有規律地遞增或遞減;……