1. 程式人生 > >遞迴演算法的簡單例項

遞迴演算法的簡單例項

一、什麼是遞迴  (遞迴 百度百科

    程式呼叫自身的程式設計技巧稱為遞迴(recursion)。它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算。

二、如何使用遞迴解決問題

    可以使用數學歸納法的思想來應用遞迴解決問題。

    最簡單和常見的數學歸納法是證明當n等於任意一個自然數時某命題成立。證明分下面兩步:

  1. 證明當n= 1時命題成立。

  2. 假設n=m時命題成立,那麼可以推導出在n=m+1時命題也成立。(m代表任意自然數)

三、例項

1.問題:如何判斷一個數是否為2的n次方?

    數學歸納法分析:

        1.如果數為1,則成立。

        2.如果數m>1成立時,m/2也成立。

    實現程式碼:

def fun(n):
    assert n > 0 and type(n) is int
    if n == 1:
        return True
    return n % 2 == 0 and fun(n // 2)

2.問題:遞迴實現斐波那契數列

    實現程式碼:

def fun(n):
    assert n > 0 and type(n) is int
    if n <= 2:
        return 1
    return fun(n-1) + fun(n-2)

3.問題:假設10個球,每個球有黑白2色,用遞迴遍歷所有情況

    實現程式碼:

def fun(n=10):
    if n == 1:
        return ['黑', '白']
    left, right = fun(n//2), fun(n-n//2)
    return [i+j for i in left for j in right]

4.問題:刪除字串左右兩端的空格

    實現程式碼:

def fun(s):
    if s[0] != ' ' and s[-1] != ' ':
        return s
    elif s[0] == ' ':
        return fun(s[1:])
    return fun(s[:-1])

最後、例項暫且更新到這裡,後期會持續補充,希望對大家有一些幫助