前言:本博文主要講解python中的遞迴,之前在c#中也講過遞迴的一些知識——深入理解c#方法過載和遞迴,有興趣的朋友可以閱讀一下!
三、遞迴的應用案例
四、遞迴的特點
遞迴是一種程式設計思想,應用場景:
在我們日常開發中,如果要遍歷乙個資料夾下面所有的檔案,通常會使用遞迴來實現。
在後續的演算法課程中,很多演算法都離不開遞迴,例如:快速排序。
遞迴的特點:
遞迴演算法:遞迴(recursion),在數學與電腦科學中,是指在函式的定義中使用函式自身的方法。我們使用的詞典,本身就是遞迴,為了解釋乙個詞,需要使用更多的詞。當你查乙個詞,發現這個詞的解釋中某個詞仍然不懂,於是你開始查這第二個詞,可惜,第二個詞裡仍然有不懂的詞,於是查第三個詞,這樣查下去,直到有乙個詞的解釋是你完全能看懂的,那麼遞迴走到了盡頭,然後你開始後退,逐個明白之前查過的每乙個詞,最終,你明白了最開始那個詞的意思。
多年前我五歲的兒子問我「不是每條船都有救生艇的吧?」「怎麼會呢?」「也許救生艇上會有一艘更小的救生艇,但是那艘小艇上可能就沒有更小的救生艇了。」
乙個洋蔥是乙個帶著一層洋蔥皮的洋蔥。
:# 1.如果是1,直接返回1 -- 出口
if num ==1:
return
1# 2.如果不是1,重複執行累加並返回結果
return num + sum_numbers(num-1)
sum_result = sum_numbers(3)
# 輸出結果為6
(sum_result)
# 階乘函式
deffact
(n):
if n ==1:
return
1return n * fact(n-
1)
def
fibo
(n):
# 出口
if n ==
1or n ==2:
return
1else
:return fibo(n -1)
+ fibo(n -
2)
必須有乙個明確的結束條件。
每次進入更深一層遞迴時,問題規模(計算量)相比上次遞迴都應有所減少。
遞迴效率不高,遞迴層次過多會導致棧溢位(在計算機中,函式呼叫是通過棧(stack)這種資料結構實現的,每當進入乙個函式呼叫,棧就會加一層棧幀,每當函式返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞迴呼叫的次數過多,會導致棧溢位),此時程式會丟擲錯誤:超出最大遞迴深度。
回溯:則是在遇到終止條件,則從最後往回返一級一級的把值返回來,這叫回溯。
鉅細!Python爬蟲詳解(建議收藏)
爬蟲 又稱為網頁蜘蛛,網路機械人,在 foaf 社群中間,更經常的稱為網頁追逐者 它是一種按照一定的規則,自動地抓取網路資訊的程式或者指令碼。如果我們把網際網路比作一張大的蜘蛛網,那一台計算機上的資料便是蜘蛛網上的乙個獵物,而爬蟲程式就是乙隻小蜘蛛,他們沿著蜘蛛網抓取自己想要的獵物 資料。網頁的請求...
Python練習例項專案(1)建議收藏
題目 有四個數字 1 2 3 4,能組成多少個互不相同且無重複數字的三位數?各是多少?程式分析 可填在百位 十位 個位的數字都是1 2 3 4。組成所有的排列後再去 掉不滿足條件的排列。程式源 usr bin python coding utf 8 for i in range 1 5 for j ...
常見的響應狀態碼,建議收藏
1 什麼是狀態碼 狀態碼是用以表示網頁伺服器超文字傳輸協議響應狀態的,是由三位數字組成,第乙個數字定義了響應的類別,且有五種可能取值。2 常見狀態碼 100 199 表示伺服器成功接收部分請求,要求客戶端繼續提交其餘請求才能完成整個 處理過程。200 299 表示伺服器成功接收請求並已完成整個處理過...