python遞迴函式

來源:互聯網
上載者:User

標籤: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遞迴函式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.