1、什么是遞回函式? 遞回函式是指在一個函式內部通過呼叫自己來完成一個問題的求解, 2、如何使用遞回函式以及什么情況下使用它? 當我們在進行問題分解時,發現分解之后待解決的子問題與原問題有著相同的特性和解法,只是在問題規模上與原問題相比 有所減小,此時,就可以設計遞回函式進行求解, 原理分析: 比如,對于計算n!的問題,可以將其分解為:n! = n*(n-1)!,可見,分解后的子問題(n-1)!與原問題n!的計算方法完全一樣,只是規模有所減小,同樣,(n-1)!這個子問題又可以進一步分解為(n-1)*(n-2)!,(n-2)!可以進一步分解為(n-2)*(n-3)!…,直到要計算1!時,直接回傳1, 3、Demo 撰寫遞回函式計算n的階乘,
1 def fac(n): #定義函式fac 2 if n==1: #如果要計算1的階乘,則直接回傳1(結束遞回呼叫的條件) 3 return 1 4 return n*fac(n-1) #將計算n!分解為n*(n-1)! 5 print(fac(5)) #呼叫fac函式計算5的階乘并將結果輸出到螢屏呼叫程序:fac(5)=>5*fac(4)=>5*(4*fac(3))=>5*(4*(3*fac(2)))=>5*(4*(3*(2*fac(1))))=>5*(4*(3*(2*1)))=>5*(4*(3*2))=>5*(4*6)=>5*24=>120 注意:當問題規模較大時,遞回呼叫會涉及到很多層的函式呼叫,一方面會由于堆疊操作影響程式運行速度,另一方面在Python中有堆疊的限制,太多層的函式呼叫會引起堆疊溢位問題(如將第5行的fac(5)改為fac(1000)則會報錯), 4、Demo 使用非遞回的方式呼叫n的階乘
1 def fac(n): #定義函式fac 2 f=1 #保存階乘結果 3 for i in range(2,n+1): #i依次取值為2至n 4 f*=i #將i乘到f上 5 return f #將計算結果回傳 6 print(fac(5)) #呼叫fac函式計算5的階乘并將結果輸出到螢屏
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/238354.html
標籤:Python
