資料結構 Python 04 遞迴

2021-10-08 23:12:17 字數 1657 閱讀 9172

遞迴應該放在漢諾塔問題之前講的,因為漢諾塔問題就是用遞迴解決的,所以今天補上!

遞迴是個很基礎的知識點,我記得大學c語言的前面就講了遞迴,可見遞迴是個簡單卻又重要的知識點!

遞迴的具體文字解釋,我就不說了,簡單來說,遞迴就是不斷呼叫自己,直到達到終止條件。

所以,遞迴的兩個特點: 呼叫自身、結束條件

我就簡單句幾個例子說明一下:

1. def func1

(x):

print

(x)func1

(x-1

)

沒有結束條件,我們都不知道到遞迴什麼時候結束,所以不是合法的遞迴

2. def func2

(x):

if x >0:

print

(x)func2

(x+1

)

看似有結束條件x>0,即當x<=0時結束,但x+1會永遠大於0,即依然不會結束,故相當於沒有結束條件,不是合法的遞迴

所以,遞迴是否有結束條件,不能只看**裡是否有判斷條件,還要結合**,判斷遞迴結束條件是否有效

3. def func3

(x):

if x >0:

print

(x)func3

(x-1

)

是合法遞迴

用遞迴計算階乘

n的階乘=nx(n-1)x(n-2) x…x2x1

比如5的階乘即為5x4x3x2x1=120

下面看看**:

def

func

(n):

s =0if n ==1:

return

1else

: s = n * func(n -1)

return s

先定義s,來儲存階乘的乘積,再加結束條件。因為階乘最多就是乘到1,所以我們判斷當n減到1時,就返回1,不然就一直呼叫自己本身。

舉個栗子——5:

5≠1,所以此時s=5*func(4);

再看func(4):

n=4≠1,所以func(4)=4*func(3),此時s=5*4*func(3);

再看func(3):

n=3≠1,所以func(3)=3*func(2),此時s=5*4*3*func(2);

再看func(2):

n=2≠1,所以func(2)=2*func(1),此時s=5*4*3*2*func(1);

再看func(1):

n=1,則此時函式返回1,即func(1)=1,所以此時s=5*4*3*2*1=120

再用程式驗證一下:

def

func

(n):

s =0if n ==1:

return

1else

: s = n * func(n -1)

return s

print

(func(5)

)

結果為120,正確!

python04 函式的定義 呼叫與遞迴

一 函式的定義 python的函式部分我覺得難點在與函式的引數,所以準備單獨寫關於引數的部分。而本文就寫關於定義 呼叫以及函式的遞迴。python中函式的定義格式為 def 函式名 引數名,引數名 下面縮排後寫函式內容。比如說寫乙個能返回我我自己名字的函式 不要說我自戀 def re name na...

python 04(程序和執行緒)

併發 當有多個執行緒在操作的時候,如果系統只有乙個cpu,把cpu執行時間劃分成若干個時間段,分配給各個執行緒執行,在乙個時間段當程序 執行時,其他執行緒處於掛起狀態。併發 間隔發生 並行當系統有乙個以上cpu時,則執行緒的操作有可能非併發。當乙個cpu執行乙個執行緒時,另乙個 cpu可以執行另乙個...

Python04 簡單if邏輯判斷

密碼校驗 簡單if判斷 usr bin env python coding utf 8 author mclind username mc password 123 username input username password input password if username usernam...