實際上遞歸函數(shù)是在棧內(nèi)存上遞歸執(zhí)行的,每次遞歸執(zhí)行一次就會耗費一些棧內(nèi)存。棧內(nèi)存的大小是限制遞歸深度的重要因素
定義簡單,邏輯清晰。理論上,所有的遞歸函數(shù)都可以寫成循環(huán)的方式,但循環(huán)的邏輯不如遞歸清晰。
使用遞歸方式需要函數(shù)做大量的壓棧和彈棧操作,由于壓棧和彈棧涉及函數(shù)執(zhí)行上下文(context)的現(xiàn)場保存和現(xiàn)場恢復(fù),所以程序的運行速度比不用遞歸實現(xiàn)要慢。
此外,大量的堆棧操作消耗的內(nèi)存資源要比非遞歸調(diào)用多。而且,過深的遞歸調(diào)用還可能會導(dǎo)致堆棧溢出。如果操作不慎,還容易出現(xiàn)死循環(huán)。因此讀者編寫代碼時需要多加注意,一定要設(shè)置遞歸操作的終止條件。
業(yè)務(wù)需求:遍歷arr列表,打印所有的值用遞歸函數(shù)實現(xiàn)
- arr=[1,[2,3]]
- def digui(arr):
- if type(arr)==list:
- for i in arr:
- if type(i)==list:
- digui(i)
- else:
- print(i)
- digui(arr)
代碼中,判斷值如果還是列表就調(diào)用自身實現(xiàn)循環(huán)判斷、打印