python函数递归年龄_Python学习笔记4-递归函数
一開始知道這個遞歸函數的時候,我的內心是崩潰的。。。
什么?還能自己調用自己?這是什么騷操作?
在數據結構與算法里有專門提到過這個遞歸思想。
那究竟什么樣的問題可以用遞歸來解決呢?
我總結了三個條件:
1. 一個問題的解可以分解為幾個子問題的解何為子問題?子問題就是數據規模更小的問題。
2. 這個問題與分解之后的子問題,除了數據規模不同,求解思路完全一樣
3. 存在遞歸終止條件把問題分解為子問題,把子問題再分解為子子問題,一層一層分解下去,不能存在無限循環,這就需要有終止條件。
哪一類問題屬于遞歸的呢
比如問小紅幾歲,他說比小明大3歲,然后問小明幾歲,小明說比小麗小四歲,問小麗幾歲,小麗說10歲。
這樣一來,我們就可以由小麗知道小明的年齡,從而知道小紅的年齡。
小麗的年齡就是一個終止條件,而小紅幾歲這個問題,要拆解為小明幾歲和小麗幾歲兩個方面。
一般遞歸
def normal_recursion(n):
if n == 1:
return 1
else:
return n + normal_recursion(n-1)
執行:
normal_recursion(5)
5 + normal_recursion(4)
5 + 4 + normal_recursion(3)
5 + 4 + 3 + normal_recursion(2)
5 + 4 + 3 + 2 + normal_recursion(1)
5 + 4 + 3 + 3
5 + 4 + 6
5 + 10
15
尾遞歸
尾遞歸基于函數的尾調用, 每一級調用直接返回函數的返回值
更新調用棧,而不用創建新的調用棧, 類似迭代的實現,時間和空間上均優化了一般遞歸!
def tail_recursion(n, total=0):
if n == 0:
return total
else:
return tail_recursion(n-1, total+n)
執行:
tail_recursion(5)
tail_recursion(4, 5)
tail_recursion(3, 9)
tail_recursion(2, 12)
tail_recursion(1, 14)
tail_recursion(0, 15)
15
總結
以上是生活随笔為你收集整理的python函数递归年龄_Python学习笔记4-递归函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 晏子为什么只坐坏车
- 下一篇: 红心猕猴桃为什么空心?