python:遞歸函數
阿新 • • 發佈:2018-06-21
.com eat NPU 自身 函數 否則 程序 結果 nbsp
在函數內部我們可以調用其它函數如:
def say(great): return great def person(name): print(say("Hello"), name) person("珊迪 奇克斯")
打印如下:
>>> Hello 珊迪 奇克斯
但如果我們調用自身,這個函數就是遞歸函數
舉個例子,我們來計算階乘 n! = 1 x 2 x 3 x ... x n(比如5的階乘:5*4*3*2*1)用函數fact(n)表示可以看出:
fact(n) = n! = 1x 2 x 3 x .....x (n - 1) x n = (n - 1) ! x n = fact(n - 1) * n
所以,fact(n)可以表示n * fact(n - 1),只有n = 1時需要特殊處理。(否則1*fact(1 - 1) =0沒有意義)
於是,fact(n) 用遞歸的方式寫出來就是:
def fact(n): if n == 1: return 1 return n * fact(n - 1)
上面就是一個遞歸函數,我們把它寫成一個功能方便我們演示結果
detail = input("階乘計算器: 九九參考計算器 按任意鍵繼續\n\n") def face(n): if n == 1: return 1 return n * face(n - 1)while True: num = int(input("輸入數值你想找到的階乘:")) print("階乘結果是:",face(num)) print("---------------------")
這樣我們就可以演示我們寫的階乘計算器程序了!
如果我們計算fact(5)可以根據函數定義看到計算過程如下:
===> fact(5) ===> 5 * fact(4) ===> 5 * (4 * fact(3)) ===> 5 * (4 * (3 * fact(2))) ===> 5 * (4 * (3 * (2 * fact(1)))) ===> 5 * (4 * (3 * (2 * 1))) ===> 5 * (4 * (3 * 2)) ===> 5 * (4 * 6) ===> 5 * 24 ===> 120
遞歸函數的優點是定義簡單,邏輯清晰。理論上,所有的遞歸函數都可以寫成循環的方式,但循環的邏輯不如遞歸清晰。
python:遞歸函數