迭代和遞迴

2022-07-18 20:39:14 字數 1329 閱讀 2600

遞迴

遞迴就是乙個問題可以不斷分解成類似的子問題,對應就是乙個函式不斷呼叫自身,通過求解更小的子問題來實現原問題的求解。

遞迴的兩個必備要素是:① 在函式裡面呼叫自身 ② 有遞迴出口,不能無限制的呼叫自身,最終可以轉化為非遞迴的情況。也就是函式中有初始值(base case),之後會結合**例項具體講解。

下面是乙個斐波那契數列的遞迴實現:(python)

#

recursion

deffibnacii_rec(n):

if 0<=n<=1: #

base case

return

n

elif n>1:

return fibnacii_rec(n-1)+fibnacii_rec(n-2)

else

:

print("

error

")

迭代迭代就是利用變數的原值計算出新的值。

下面是乙個斐波那契數列的迭代實現:

#

iteration

deffibnacii_ite(n):

if 0<=n<=1:

return

n n0=0

n1=1its=n-1n_next=0

while its>0: #

n_next is updated iteratively

its-=1n_next=n0+n1

n0=n1

n1=n_next

return n_next

呼叫兩函式,比較計算時間

def

call_fib(function,n):

time_s =time.time()

print

(function(n))

time_e =time.time()

print(str(function).split('

')[1]+"

:", time_e -time_s)

call_fib(fibnacii_rec,30)

call_fib(fibnacii_ite,30)

執行結果如下:

我們可以看到當n=30時,遞迴已經需要0.5s,而迭代還是0,當n越大差異越明顯。

總結,遞迴效率比較低,尤其在輸入較大的時候,並且遞迴太深有堆疊溢位的問題。

ref:

遞迴和迭代 迭代與遞迴

很多程式設計小白都會遇到 迭代 和 遞迴 的問題 包括我自己 大部分同學還是不知道迭代與遞迴的區別。下面我就嘗試用最通俗易懂的模式講解遞迴與迭代的區別。1.迭代 迭代其實很簡單,我們在程式設計中經常用到迭代。比如說 i 1 print i 這個就是乙個迭代,沒想到吧。迭代的意思其實就是在迴圈 現了參...

遞迴和迭代

遞迴和迭代是兩種常用的演算法,很多人知道怎麼寫遞迴和迭代,但是不知道什麼時候該用遞迴,什麼時候該用迭代。下面的 分別通過使用遞迴和迭代計算fibonacci數列,可以很清楚的看到效率的驚人差別。當然,很難有個準則說什麼時候該用遞迴,什麼時候該用迭代,但有乙個很簡單的判斷方法 如果你的遞迴呼叫是在函式...

遞迴和迭代

分享自 酷勤網 www.kuqin.com 遞迴函式 遞迴可以描述不同的概念,如果說乙個函式是遞迴的,那麼就是說函式的定義中 直接或者間接地 引用了該函式本身。比如求斐波那契數列,使用swift實現 func fib n int intreturn fib n 1 fib n 2 從函式定義看,fi...