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