1. 程式人生 > >python:遞歸函數

python:遞歸函數

.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:遞歸函數