首先:遞迴和迭代都是迴圈的一種。
def
demo_0
(n):
# n>=1
res =
0for i in
range(1
, n+1)
: res +=
1return res
迭代是函式內某段**實現迴圈,
迭代與普通迴圈的區別:迴圈**中參與運算的變數同時是儲存結果的變數,當前儲存的結果作為下一次迴圈計算的初始值。
簡單來說就是,利用變數的原值推算出變數的乙個新值。
迭代使用計數器結束迴圈。
def
demo_1
(n):
# n>=1
res =
0for i in
range(1
, n +1)
: res += i
return res
如果迭代是a不停的呼叫b,遞迴就是自己呼叫自己,
遞迴是重複呼叫函式自身實現迴圈。
遞迴迴圈中,遇到滿足終止條件的情況時逐層返回來結束。這裡可以拆解成傳遞、回歸
程式呼叫自身的程式設計技巧稱為遞迴,是函式自己呼叫自己。乙個函式在其定義中直接或間接呼叫自身的一種方法,它通常把乙個大型的複雜的問題轉化為乙個與原問題相似的規模較小的問題來解決,可以極大的減少**量.遞迴的能力在於用有限的語句來定義物件的無限集合。
遞迴中一定有迭代,但是迭代中不一定有遞迴,大部分可以相互轉換。
能用迭代的不用遞迴,遞迴呼叫函式,浪費空間,並且遞迴太深容易造成堆疊的溢位。
def
demo_2
(n):
if n <=1:
return n
return n*demo_2(n-
1)
執行過程:
demo_2(5)=5*demo_2(4)
demo_2(5)=5*4*demo_2(3)
demo_2(5)=5*4*3*demo_2(2)
demo_2(5)=5*4*3*2*demo_2(1)
demo_2(5)=5*4*3*2*1
demo_2(5)=5*4*3*2
demo_2(5)=5*4*6
demo_2(5)=5*24
demo_2(5)=120
遞迴迴圈中,遇到滿足終止條件的情況時逐層返回來結束。
迭代則使用計數器結束迴圈。當然很多情況都是多種迴圈混合採用,這要根據具體需求。
這裡要強調的是,大量的遞迴呼叫會小號大量的時間和記憶體,而迭代則不需要反覆呼叫函式和占用額外的記憶體。
def
demo1
(n):
res =
1for i in
range(1
, n +1)
: res *= i
return res
defdemo2
(n):
if n <=1:
return n
return n * demo2(n -1)
import time
start_time = time.time(
)demo1(
999)
end_time = time.time(
)spend_time1 = end_time - start_time
start_time = time.time(
)demo2(
999)
end_time = time.time(
)spend_time2 = end_time - start_time
print spend_time1
print spend_time2
0.000258922576904
0.000699043273926
另外python 的預設遞迴深度是有限的,預設1000,超出則會引發異常
runtimeerror: maximum recursion depth exceeded
迴圈(迭代)與遞迴的區別
迴圈 迭代 與遞迴的區別 1。遞迴演算法與迭代演算法的設計思路區別在於 函式或演算法是否具備收斂性,當且僅當乙個演算法存在預期的收斂效果時,採用遞迴演算法才是可行的,否則,就不能使用遞迴演算法。當然,從理論上說,所有的遞迴函式都可以轉換為迭代函式,反之亦然,然而代價通常都是比較高的。但從演算法結構來...
迴圈(迭代)與遞迴的區別
1.遞迴演算法與迭代演算法的設計思路區別在於 函式或演算法是否具備收斂性,當且僅當乙個演算法存在預期的收斂效果時,採用遞迴演算法才是可行的,否則,就不能使用遞迴演算法。當然,從理論上說,所有的遞迴函式都可以轉換為迭代函式,反之亦然,然而代價通常都是比較高的。但從演算法結構來說,遞迴宣告的結構並不總能...
迴圈(迭代)與遞迴的區別
遞迴的基本概念 程式呼叫自身的程式設計技巧稱為遞迴,是函式自己呼叫自己.乙個函式在其定義中直接或間接呼叫自身的一種方法,它通常把乙個大型的複雜的問題轉化為乙個與原問題相似的規模較小的問題來解決,可以極大的減少 量.遞迴的能力在於用有限的語句來定義物件的無限集合.使用遞迴要注意的有兩點 1 遞迴就是在...