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個值
以下是一個例子:
def fibonacci(n):
if not isinstance(n, int):
raise TypeError('型態錯誤!')
if n < 0:
raise ValueError('值錯誤')
if n<=1:
return n
else:
return fibonacci(n-1) + fibonacci(n-2)
#-----------------------------------
print(fibonacci(9))
第8, 9行,第0個值是0;第1個值是1。 第11行,費氏數列第n個值 = 第n-1的值 + 第n-2的值。
執行結果:
34
說明:

問題:
用recursive的方法寫一個夏季電費函式summer(degree),計算並回傳電費,各分段收費如下。電費以不同分段之標準收費,如使用電費500度,則前300度每度3.02元,後200度每度5.44元。
.................................
每度(元)
.................................
330度(含)以下 3.02
331-700度 5.44
701-1000度 6.16
1001度(含)以上 6.71
.................................
測試主程式:
print(f'{summer(1200):,.0f}元')
print(f'{summer(850):,.0f}元')
print(f'{summer(550):,.0f}元')
print(f'{summer(425):,.0f}元')
print(f'{summer(215):,.0f}元')
測試結果範例:
6,200元 3,934元 2,194元 1,514元 650元