Python遞迴與迭代
1、遞迴與迭代:
遞迴和迭代都是迴圈的一種。簡單地說,遞迴是重複呼叫函式自身實現迴圈。迭代是函式內某段程式碼實現迴圈,而迭代與普通迴圈的區別是:迴圈程式碼中參與運算的變數同時是儲存結果的變數,當前儲存的結果作為下一次迴圈計算的初始值。
遞迴迴圈中,遇到滿足終止條件的情況時逐層返回來結束。迭代則使用計數器結束迴圈。當然很多情況都是多種迴圈混合採用,這要根據具體需求。
具體來講:
遞迴的基本概念:程式呼叫自身的程式設計技巧稱為遞迴,是函式自己呼叫自己. 一個函式在其定義中直接或間接呼叫自身的一種方法,它通常把一個大型的複雜的問題轉化為一個與原問題相似的規模較小的問題來解決,可以極大的減少程式碼量.遞迴的能力在於用有限的語句來定義物件的無限集合.
使用遞迴要注意的有兩點:
1)遞迴就是在過程或函式裡面呼叫自身;
2)在使用遞迴時,必須有一個明確的遞迴結束條件,稱為遞迴出口.
遞迴分為兩個階段:
1)遞推:把複雜的問題的求解推到比原問題簡單一些的問題的求解;
2)迴歸:當獲得最簡單的情況後,逐步返回,依次得到複雜的解.
利用遞迴可以解決很多問題:如揹包問題,漢諾塔問題,斐波那契數列為:1,1,2,3,5...
迭代:利用變數的原值推算出變數的一個新值.如果遞迴是自己呼叫自己的話,迭代就是A不停的呼叫B.
遞迴中一定有迭代,但是迭代中不一定有遞迴,大部分可以相互轉換.能用迭代的不用遞迴,遞迴呼叫函式,浪費空間,並且遞迴太深容易造成堆疊的溢位.
例如對於裴波那契數列的實現:
1)迭代:
2)遞迴:
2、遞迴的應用舉例:
1)使用遞迴編寫一個十進位制轉換為二進位制的函式(要求採用“取2取餘”的方式,結果與呼叫bin()一樣返回字串形式)。
程式碼:
def b(n):
if n//2==0:
n=str(n)
return n
else:
x=n%2
n=n//2
s=str(x)
return b(n)+s
print(b(6))
2)寫一個函式x(n),將引數n分解出每個位的數字並按順序存放到列表中。舉例:x(12345) ==> [1, 2, 3, 4, 5]
程式碼:
def x(n):
if n<10:
list1=[]
list1.append(n)
return list1
else:
s=n%10
n=n//10
list1=list(x(n))
list1.append(s)
return list1
print(x(12345))
3)求1到n的階乘
def jie(n):
if n<1:
print("輸入有誤")
elif n==1:
return 1
else:
return jie(n-1)*n
n=input("請輸入n:")
x=int(n)
result=jie(x)
print("n的階乘大小為:",result)