Python中簡單的遞迴演算法

2021-06-09 17:58:09 字數 1520 閱讀 5922

可以遞迴的問題往往在大多數情況下都可以使用迴圈代替,並且迴圈的效率往往更高。但遞迴的**可讀性非常強,非常適合於效能要求不高的問題實現和後期**的維護。

1、求階乘,階乘和冪級數是兩個最經典的遞迴函式。假設要計算數n的階乘,b的階乘的定義為n*(n-1)*(n-2)*…*1,其中n必須為無符號整數(unsigned int),0和1的階乘都為1,python中的實現如下:

def factorial(n):

assert n==int(n),'parameter must be int number'

if n in (0,1):

return 1

else:

return n*factorial(n-1)

2、冪級數,對於任意底數x來說,它的零次冪級數為1,即power(x,0)為1;對於n大於0的正整數來說,power(x,n)是x乘以power(x,n-1)的結果;對於n小於0的負整數,power(x,n)是(1/x)乘以power(x,n+1):

def power(x,n):

assert n==int(n),'entered number must be int'

if n == 0:

return 1

elif x==0:

return 0

elif n==abs(n):

return x*power(x,n-1)

else:

return 1/float(x)*power(x,n+1)

3、二分查詢(binary search)是另乙個常見的遞迴時間的例子。假定我們要求在某個排過序的序列中查詢某個數字並確定具體的位置,我們首先可以判斷:這個數字與序列的中間值的關係,判定數字是否在序列的左半部分或有半部分甚至等於中間值;再次判定數字在左半邊序列的左半部分還是右半部分,如此迴圈往復確定數字的位置。演算法的遞迴定義:

下面假定數字一定能在序列中到,來實現乙個簡單的二分查詢函式:

def bisearch(sequence,number,lower=0,upper=none):

if upper is none:upper=len(sequence)-1

elif lower==upper:

assert number == sequence[upper]

return upper

else:

middle = (lower+upper)//2

if number>sequence[middle]:

return bisearch(sequence,number,middle+1,upper)

else:

return bisearch(sequence,number,lower,middle)

>>> seq = [12,14,46,85,234,45,242,34,100,45,67]

>>> seq.sort()

>>> bisearch(seq,34)

其他內容請參見我的博:

python中簡單的遞迴

遞迴呼叫 乙個函式,呼叫了自身 遞迴函式 乙個會呼叫自身的函式稱為遞迴函式 方式 1 寫出臨界條件 2 找這一次和上一次的關係 3 假設當前函式已經能用,呼叫自身計算上一次的結果,再求出本次的結果 輸入乙個數 大於等於1 求1 2 3 n的和 方法1 def sum1 n sum 0 for x i...

遞迴演算法的簡單理解

遞迴演算法在我們的處理各種問題的時候大量的使用,是乙個可以將大型的問題簡單化的演算法 對遞迴的理解 遞迴在概念上籠統的來說就是自己呼叫自己的方法,就像是查字典一樣,一層一層的查,直到找到你想要的那個資料,然後再逐一的返回 遞迴的抽象化理解 其實遞迴可以理解為出棧入棧的形式,他執行第一步遞迴,就將函式...

python遞迴 演算法 遞迴(Python解釋)

通俗一點來說,遞迴就是一種在函式內呼叫自己的演算法。每一級呼叫都會有自己的引數。每一次呼叫都會有一次返回。可能是返回自己,繼續遞迴 也可能是返回特定值,結束遞迴。遞迴解釋 優點 直觀,實現簡單,可讀性好。缺點 會有重複的呼叫 優化裡會說明 占用空間大,遞迴太深,會造成棧溢位 呼叫太多,不給你呼叫了 ...