遞迴應該放在漢諾塔問題之前講的,因為漢諾塔問題就是用遞迴解決的,所以今天補上!
遞迴是個很基礎的知識點,我記得大學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...