日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python递归算法_python递归算法(上)

發布時間:2023/12/3 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python递归算法_python递归算法(上) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是遞歸

在函數內部,是可以調用其他函數的。如果一個函數在內部調用自身,就稱這個函數就是遞歸函數。

舉個例子:

實現一個可以自定義重復打印你好的函數。

要實現重復打印,可能我們立馬就會想到使用循環。

如果要求不能使用循環呢,那我們就可以通過下面的方法來實現。

原理很好理解,就是不斷的調用自身,如果前面不加上if條件判斷,理論上是會陷入死循環的,但是實際上遞歸到一定次數(最大遞歸次數)就會報錯停止。

遞歸有什么用

知道遞歸是怎么回事,那么遞歸有什么實際用處嘛,或者說有什么獨特之處。比如上面的例子用循環就很方便,我為什么還要學習遞歸這種方法呢?

遞歸實際上是一種解決問題的方法,將問題分解為更小的子問題,直到得到一個足夠小的問題可以被很簡單的解決。對于非常簡單的問題,可能我們使用循環就非常方便,比如前面的那個案例,但是有些問題如果使用循環,可能就會非常麻煩,或者解決方案很難讓人理解清楚里面的邏輯。

因為遞歸函數是找到最小問題的解決方法,然后只要不斷使用這個方法就可以解決了,所以遞歸函數的優點是定義簡單,邏輯清晰。理論上,所有的遞歸函數都可以寫成循環的方式,但循環的邏輯不如遞歸清晰。

下面就通過一些案例來實際感受一下。

遞歸的應用

1.計算階乘n! = 1 x 2 x 3 x ... x n

本案例來源于廖雪峰的網站

factorial(n) = n! = 1 x 2 x 3 x ... x (n-1) x n = (n-1)! x n = factorial(n-1) x n

所以,factorial(n)可以表示為n x factorial(n-1),只有n=1時需要特殊處理。

于是,factorial(n)用遞歸的方式寫出來就是:

在計算機中,函數調用是通過棧(stack)這種數據結構實現的,每當進入一個函數調用,棧就會加一層棧幀,每當函數返回,棧就會減一層棧幀。

===> factorial(5)

===> 5 * factorial(4)

===> 5 * (4 * factorial(3))

===> 5 * (4 * (3 * factorial(2)))

===> 5 * (4 * (3 * (2 * factorial(1))))

===> 5 * (4 * (3 * (2 * 1)))

===> 5 * (4 * (3 * 2))

===> 5 * (4 * 6)

===> 5 * 24

===> 120

2.斐波那契數列

列舉可以得出0,1,1,2,3,5,Fib(n-2),Fib(n-1),Fib(n);除了第一項和第二項都為1外(0忽略),需要單獨拿出來,其它項都滿足Fib(n)=Fib(n-2)+Fib(n-1)

模仿Fib函數當i = 5的執行過程。

函數如果調用自己比較難理解,可以看作調用其它函數,只不過和自己長的相同而已相同而已。

3.螺旋線

每一次都是前進length長度,然后右轉,長度需要不斷的減小,直到小于5停止。

(全文完)

教你實現一個gif處理軟件(下)

如何理解python一行代碼實現一個愛心字符畫?

顯示進度下載圖片

如何使用python實現文本進度條?

總結

以上是生活随笔為你收集整理的python递归算法_python递归算法(上)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。