Python 進階:遞歸演算法的關鍵點剖析(階乘,斐波那契數列案例)

Python 中,遞歸是一種很多人都頭暈的演算法。
那在使用這個演算法的時候,怎樣可以更好地捋清楚思路呢?

首先我們來看案例:

一、求階乘

傳統實現方式:

def fact_for (x):
    r = 1
    for i in range(1,x+1):
        r *= i
    return r

遞歸實現方式:

def fact (x):
    if x!=1:
        r = x*fact(x-1)
        return r
    else:
        return x

二、斐波那契數列

傳統實現方法:

def fibonacci_for (x):
    if x < 1:
        return 0
    elif x == 1:
        return 1
    elif x == 2:
        return 1
    else:
        a = 1
        b = 1
        for i in range(2,x):
            c = a+b
            a,b = b,c
        return c

遞歸實現方式:

def fibonacci (x):
    if x < 1:
        return 0
    elif x == 1:
        return 1
    elif x == 2:
        return 1
    else:
        return fibonacci (x-1)+fibonacci (x-2)

三、遞歸的要點分析

1. 遞歸需要函數自己調用自己

比如前面 r = x*fact(x-1) 語句,和 fibonacci (x-1)+fibonacci (x-2) 語句。

2. 遞歸需要有個停止條件(防止無限遞歸)

比如求階乘的時候,當計算到 1 的時候,就要結束了。

3. 遞歸需要關注通項式

比如斐波那契數列的核心,就是第 n 個元素的值,為 n-1 和 n-2 這兩個值的和。

4. 注意點

Python 中默認的遞歸最大層數應該是 100 層。
當我們需要超過這個層數的時候,可以用以下語句設置:

import sys
sys.setrecursionlimit(100)

後面找時間再多補充幾個案例,請期待。。。