遞歸是程序語言中的一個很基礎的應用,學習遞歸對理清程序編碼的思路
非常有幫助
所以在本章中把遞歸也作為學習的一部分內容。希望讀者了解並掌握它的相關用法
我們在中學時期都學過數學歸納法,例如求n的階乘
比如要求5!,必須先求出4!,而要求4!,必須先求3!,要求3!,
就必須先求2!,要求2!,必須求1!,要求1!,必須求0! 而0!=1,所以1!=0!*1=1,再進而求2!,3!分別表示
讀者可以從上面觀察到,除計算1!子程序外,其他的子程序基本相似,可以設計這個子程序
讀者是否已明白?如果一個方法調用了其本身,那麼這個方法就是遞歸,在這行
程序語句res= factorial5時,就會執行 factorial(5),但執行 factorial5時,又會調用factorial(4)這時要注意,factorial(5)和factorial(4)雖然是同一個代碼段,但在內存中,它的數據區是兩份,而執行factorial(4)時又會調用factorial(3),執行factorial(3)又會調用factorial(2),每調用一次
factorial函數,就會在內存中新增一個數據區,那麼這些複製了多份的函數大家可以把它看成是多個不同名的函數來理解
把上例補充完整 結果如下所示
裴波納契數列一個比較定點的數學推理題,這個數列的第一位和第二位均為1,其他位數的值均為前面兩位的和,如圖4.14所示
我們試用遞歸算法求出第20位上的數值
遞歸調用在明白原理的情況下,操作起來比較容易。用遞歸來解決裝波納契數列問題的代碼如下所示
輸出結果
對於把十進位數轉換成二進位數的過程,讀者可以試著用遞歸的方式來實現,這將有助於理解遞歸的用法
小編是一個有著5年工作經驗的程式設計師,關於Java,自己有做材料的整合,一個完整學習Java的路線,學習材料和工具。需要的夥伴可以私信我,發送「交流」後就可免費獲取。對於學習Java有任何問題(學習方法,學習效率,如何就業)都可以問我。希望你也能憑自己的努力,成為下一個優秀的程式設計師!