全域變數與區域變數
在 Python 中,有兩種變數範疇,一個是「區域變數」,另一個是「全域變數」。如果你在函數內部定義變數,那就是區域變數,它只能在這個函數內使用,離開這個函數它就無效了。而全域變數,顧名思義,它是可以在整個程式中使用的。
count = 0
def increment():
global count # 告訴Python這裡的count是全域變數
count += 1
increment()
print(count) # 輸出 1
在這個程式中,我們定義了一個全域變數 count 並且在函數 increment 裡增加它的值。因為我們使用了 global 關鍵字,所以我們能夠直接修改 count。如果不加這個 global,Python 會以為我們在函數內創建了一個新的區域變數,而不是修改全域變數。
遞迴 (Recursion)
它指的是函數調用自己。遞迴非常適合用來解決那些可以被分解成更小部分的問題。比如說計算階乘就非常適合使用遞迴。
階乘的定義是:n! = n * (n-1) * (n-2) ... 1。我們可以用一個遞迴函數來簡單地計算這個值:
def factorial(n):
if n == 1: # 基本情況,當 n 是 1 的時候停止遞迴
return 1
else:
return n * factorial(n - 1) # 函數調用自己,逐步減少 n
print(factorial(5)) # 輸出 120
這個函數做的事情是,當我們傳入一個 n,如果 n 是 1,它會返回 1(因為 1 的階乘就是 1),但如果 n 不是 1,函數會返回 n * factorial(n - 1),也就是說它會繼續調用自己,不斷縮小問題範圍直到到達 1 為止。