所謂基例就是不需要遞歸就能求解的,一般來(lái)說(shuō)是問(wèn)題的最小規(guī)模下的解。
創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括阜平網(wǎng)站建設(shè)、阜平網(wǎng)站制作、阜平網(wǎng)頁(yè)制作以及阜平網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,阜平網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到阜平省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
例如:斐波那契數(shù)列遞歸,f(n) = f(n-1) + f(n-2),基例是1和2,f(1)和f(2)結(jié)果都是1
再比如:漢諾塔遞歸,基例就是1個(gè)盤子的情況,只需移動(dòng)一次,無(wú)需遞歸
遞歸必須有基例,否則就是無(wú)法退出的遞歸,不能求解。
def Sum(m): #函數(shù)返回兩個(gè)值:遞歸次數(shù),所求的值 if m==1:return 1,m return 1+Sum(m-1)[0],m+Sum(m-1)[1]cishu=Sum(10)[0] print cishu def Sum(m,n=1): ... if m==1:return n,m ... return n,m+Sum(m-1,n+1)[1] print Sum(10)[0] 10 print Sum(5)[0] 5
遞歸的思想主要是能夠重復(fù)某些動(dòng)作,比如簡(jiǎn)單的階乘,次方,回溯中的八皇后,數(shù)獨(dú),還有漢諾塔,分形。
由于堆棧的機(jī)制,一般的遞歸可以保留某些變量在歷史狀態(tài)中,比如你提到的return
x
*
power...,
但是某些或許龐大的問(wèn)題或者是深度過(guò)大的問(wèn)題就需要盡量避免遞歸,因?yàn)榭赡軙?huì)棧溢出。還有一個(gè)問(wèn)題是~python不支持尾遞歸優(yōu)化?。。?!所以~還是盡量避免遞歸的出現(xiàn)。
def
power(x,
n)
if
n
0:
return
1
return
x
*
power(x,
n
-
1)
power(3,
3)
3
*
power(3,
2)
3
*
(3
*
power(3,
1))
3
*
(3
*
(3
*
power(3,
0)))
3
*
(3
*
(3
*
1))
這里n
=
0,
return
1
3
*
(3
*
3)
3
*
9
27
當(dāng)函數(shù)形參n=0的時(shí)候,開始回退~直到第一次調(diào)用power結(jié)束。
def?jiezheng(n):
if?n==1?or?n==0:
return?1
return?n*jiezheng(n-1)
遞歸調(diào)用函數(shù)jiezheng算階乘
jiezheng(5)
返回120