什么是遞歸?用十進制轉二進制的Python函數示例說明


先上用Python寫的十進制轉二進制的函數代碼:

 1 def Dec2Bin(dec):
 2     result = ''
 3     
 4     if dec:
 5         result = Dec2Bin(dec//2)
 6         return result + str(dec%2)
 7     else:
 8         return result
 9 
10 print(Dec2Bin(62))

圖解此函數執行過程:

文字描述此函數的執行過程:

以十進制數10作為例子來解釋遞歸問題。首先,進入函數Dec2Bin(10),此時參數dec=10,而result接受的是Dec2Bin(5)的返回值;於是,程序又進入了Dec2Bin(5)的函數體,注意,此時Dec2Bin(10)的函數程序還沒有執行完,正在外層程序等待Dec2Bin(5)給它返回result的值呢。在Dec2Bin(5)的函數里,result的值又是Dec2Bin(2)的返回值;於是乎,程序又讓Dec2Bin(5)等到起,轉而進入Dec2Bin(2)的函數里。在Dec2Bin(2)的函數里,同樣有個result的值,它是Dec2Bin(1)的返回值;程序暫停了Dec2Bin(2)繼續往下執行,來到了Dec2Bin(1)函數體,然而,Dec2Bin(1)的result的值是Dec2Bin(0)的返回值;正在這時,程序說,Dec2Bin(dec)函數的參數dec為假的時候,執行else語句,即返回result,而此時result就是初始化時的空值,所以,Dec2Bin(0)返回空值給Dec2Bin(1),並被Dec2Bin(1)的result所接受。緊接着,Dec2Bin(1)繼續執行沒有完成的代碼,即:return result+str(dec%2)這條語句,根據Dec2Bin(1)當前的result及dec的值,返回了字符串“1”,這個字符串就傳給了還在外層等待的Dec2Bin(2)。以此類推,最終讓Dec2Bin(10)這個函數也得到了它的result。

總結:遞歸就是外層的函數的結果取決於內層函數的相關值,直到內層函數一層一層地把相關的值都返回來為止。

新手一枚,自我學習中,有問題歡迎指正!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM