通過Python3實現一些簡單遞歸函數
大家好!今天我給大家演示一下通過Python3實現一些簡單遞歸函數的過程。遞歸算法實際上就是分而治之思想的具體應用。每當你設計一個算法時,只要發現算法的處理對象變化,但是處理過程(步驟)相同,則可以優
大家好!今天我給大家演示一下通過Python3實現一些簡單遞歸函數的過程。遞歸算法實際上就是分而治之思想的具體應用。每當你設計一個算法時,只要發現算法的處理對象變化,但是處理過程(步驟)相同,則可以優先考慮遞歸實現,尤其是在處理的對象個數不確定時更需要采用遞歸算法。設計遞歸算法時,只需要找到基線條件(函數返回的條件)和遞歸條件(繼續進行遞歸調用的條件)即可開始編寫算法實現,通常這兩個條件是互斥存在的。如果您覺得這篇教程有幫助,請為我投上寶貴的一票,謝謝!
創建Pure Python項目
啟動PyCharm軟件,新建一個名為"AlgorithmDemo4"的Pure Python項目,然后向項目中添加一個名為""的Python文件。在文件中定義一個sum_num函數,然后調用此函數輸出100以內的自然數之和。sum_num函數采用for循環實現從1到n之間的自然數累加,計算的最終結果會返回給函數調用者。測試代碼編寫完畢后,調試運行程序。在彈出的控制臺窗口中,可以見到程序的執行結果,表示一切正常。
使用等差數列求和公式
關閉控制臺窗口,返回到文件中。繼續定義一個sum_num_formula函數及調用此函數計算100以內自然數的測試代碼。sum_num_formula函數根據等差數列求和公式實現,具有極高的運算效率。測試代碼編寫完畢后,調試運行程序。在彈出的控制臺窗口中,可以確定該函數的計算結果與sum_num函數相同,唯一區別是其返回值為浮點數。
遞歸方式計算自然數之和
關閉控制臺窗口返回文件中。這次在代碼中定義一個以遞歸方式計算N以內自然數和的函數sum_num_rec。實現該函數的實質,仍舊是累加求和,與for循環實現不同的是每次累加都是通過調用函數自身實現的,另外,遞歸是從n加到1,當n等于0時即停止遞歸(即基線條件)。sum_num_rec函數及其測試代碼編寫完畢后,調試運行程序,在彈出的控制臺窗口中,可以見到與之前兩個函數一致的輸出結果,表示算法實現正確。
計算正整數階乘
關閉控制臺窗口返回到文件中,繼續定義一個采用遞歸方式計算正整數階乘的函數calc_factorial以及調用它計算0~10階乘的測試代碼。在實現calc_factorial函數時,需要注意0的階乘是1,表示沒有東西組合,這也是一種組合結果。因此,該函數的基線條件為n等于0,遞歸條件則為n大于0,對于n小于0則當做非法輸入,返回None(這里應該拋異常)。
十進制數轉二進制數
計算階乘的測試代碼編寫完畢后,調試運行程序。在彈出的控制臺窗口中,可以見到輸出的0~10的階乘計算結果。
關閉控制臺窗口返回到文件中。最后,我給大家介紹一下根據短除法計算10進制數轉2進制數的遞歸函數實現過程。短除法實際上具有非常明顯的遞歸特性,其計算條件輸入數小于2,反之則是遞歸條件。對于10進制轉2進制而言,除了用短除法計算二進制位的值,還需要最終將每一步得到的余數顛倒,才能得到正確的結果。因此,在實現d2b函數時,將通過短除法計算二進制位的過程放到short_div函數中,顛倒結果次序的處理則放到d2b函數中。當函數編寫完畢后,繼續添加調用d2b函數輸出0~32的二進制數的測試代碼。
代碼編寫完畢后,調試運行程序,在彈出的控制臺窗口中,可以見到按自定義格式輸出的十進制數轉二進制數的結果。
至此,簡單遞歸算法就介紹完畢了。希望你在設計算法時,可以抓住分而治之思想的精髓(基線條件和遞歸條件),設計出高效的遞歸算法,Enjoy!