12. 遞迴函式

(1) 計算 n!

以下是一個例子:

def factorial(n):
    if not isinstance(n, int):
        raise TypeError('型態錯誤!')

    if n < 0:
        raise ValueError('值錯誤')
    
    if n==1:
        return 1
    else:
        return n * factorial(n-1)
 
#-----------------------------------
print(factorial(10))  

第11行,factorial(n-1)呼叫自己,但是傳遞的引數遞減1。

執行結果:

3628800

說明

(2) 計算費氏數列的第n個值

以下是一個例子:

第8, 9行,第0個值是0;第1個值是1。 第11行,費氏數列第n個值 = 第n-1的值 + 第n-2的值。

執行結果:

34

說明:

問題:

用recursive的方法寫一個夏季電費函式summer(degree),計算並回傳電費,各分段收費如下。電費以不同分段之標準收費,如使用電費500度,則前300度每度3.02元,後200度每度5.44元。

測試主程式:

測試結果範例:

6,200元 3,934元 2,194元 1,514元 650元