23 recursion
- recursion(遞迴)在programming中的意思是:
在函數中,呼叫函數自己
,比如這樣:
def my_func(num):
3 + my_func(num)
- 寫recursion時要很小心,因為他是個雙面刃:
- 寫的好:code很簡潔,執行效率又高
- 寫不好:無限迴圈無法停止(如上例),耗費所有電腦資源
- 寫的好:code很簡潔,執行效率又高
- recursion有兩個經典例子,一個是
n!的計算
,另一個是費氏數列
,我們來看看:
23.1 n! 計算
- 如果今天想做個n!的function,我們可以用for來做
def test(n):
= 1
result for item in range(1, n+1):
= result * item
result return result
3)
test(#> 6
- 但如果你用recursion,就會很簡單
def test2(n):
if n == 1:
return n
else:
return n * test2(n-1)
print(test2(3))
#> 6
- 我們先看recursion的第一個重點,也就是
n * test2(n-1)
這一行
- 所以當我輸入n=3時,他會做
3 * test2(2)
=3 * 2 * test2(1)
=3*2*1*test2(0)
=3*2*1*0*test2(-1)
= …
- 看起來,前面都做對了,但等到
test2(0)
時就錯了
- 所以,recursion會需要加上
何時跳出
這個條件。所以前面加了if n == 1: return n
,那上面的遞迴式,就變成:3 * test2(2)
=3 * 2 * test2(1)
=3*2*1
,沒辦法再遞迴了,結束在這