標籤:range 函數 圖片 電腦 style 分解 技術分享 lse 代碼簡潔
遞迴函式簡單來說就是函數的自我調用。使用遞迴函式很多時候可以使得代碼簡潔,優雅。可以把複雜的問題分解成簡單的子問題。遞迴有無與倫比的魅力,從著名的電腦名稱言就可以看出遞迴的奇妙:
To iterate is human,to recurse divine. 迭代者為人,遞迴者為神。 – L. Peter Deutsch
其實上面這句話有點誇張了,遞迴不是完美的,它也有致命的弱點,那就是執行效率低,而且容易導致棧溢出(超過一千次)。
下面我們從一副美妙的圖來直觀的體會一下遞迴。
我們用一個簡單的執行個體來比較一下遞迴和迭代的區別:求N的階乘
使用迭代的方法如下:
def jiecheng(n): result=1 for i in range(n) : result*=(i+1) print(‘%d的階乘為%d‘%(n,result))
jiecheng(5) #5的階乘為120
使用遞迴的方法如下:
def jiecheng(n): if n==1: return 1 else: return n*(jiecheng(n-1))
可以看出使用遞迴可以讓代碼更加簡潔優雅,更加具有數學美。
下面再通過斐波那契數列來探討一下遞迴:
1、通過迴圈實現:
a=0b=1while b < 100: print(b) a, b = b, a+b
2、普通遞迴實現斐波那契數列:
1 ls=[]2 for i in range(10):3 if i==0 or i ==1:4 ls.append(1)5 else:6 ls.append(ls[i-2]+ls[i-1])7 print(ls) #[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
3、通過尾遞迴方式實現:
def fbnq(n,a,b): if n==0: return (b) else: return fbnq(n-1,b,a+b)print([fbnq(i,0,1) for i in range(5)])
這三種方法迭代效率其實是最高的,然後
python遞迴函式