先上用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。
總結:遞歸就是外層的函數的結果取決於內層函數的相關值,直到內層函數一層一層地把相關的值都返回來為止。
新手一枚,自我學習中,有問題歡迎指正!