就是遞歸到什么時(shí)候該停下來(lái)。
企業(yè)建站必須是能夠以充分展現(xiàn)企業(yè)形象為主要目的,是企業(yè)文化與產(chǎn)品對(duì)外擴(kuò)展宣傳的重要窗口,一個(gè)合格的網(wǎng)站不僅僅能為公司帶來(lái)巨大的互聯(lián)網(wǎng)上的收集和信息發(fā)布平臺(tái),創(chuàng)新互聯(lián)面向各種領(lǐng)域:不銹鋼雕塑等成都網(wǎng)站設(shè)計(jì)、營(yíng)銷型網(wǎng)站解決方案、網(wǎng)站設(shè)計(jì)等建站排名服務(wù)。
比如斐波那契數(shù)列,1、1、2、3、5、8、13、21、34、……在數(shù)學(xué)上,斐波納契數(shù)列以如下被以遞歸的方法定義:F(0)=0,F(xiàn)(1)=1, F(n)=F(n-1)+F(n-2)(n=2,n∈N*)。
可以看到他的規(guī)律為,第N個(gè)數(shù)的值為第N-1和第N-2個(gè)數(shù)的值之和。比如要求F(10),得先求F(9)和F(8),要求F(9)得先求F(8)和F(7)……如此遞歸下去,但是F(1)和F(2)的值始終是1,那n=1或者n=2就可以作為遞歸的終止條件。
def?fib(n):
if?n=2?:
return?1
else:
return?fib(n-1)+fib(n-2)
這個(gè)是遞歸函數(shù),遞歸函數(shù)必須有收斂條件,收斂條件是x==1
一直遞歸到x==1就可以了
你要知到第n個(gè)人的年齡,其實(shí)就是第一個(gè)人的年齡加上n-1個(gè)2對(duì)吧,也就是n-1個(gè)人的年齡+2,再加上n-2個(gè)人的年齡+2,一直加到第一個(gè)人的年齡。上面的函數(shù)調(diào)用,一直沒(méi)有返回而是一層一層的調(diào)用,知道x==1的時(shí)候才會(huì)返回。每次都會(huì)調(diào)用堆棧保存局部變量。
如果遞歸次數(shù)過(guò)多,系統(tǒng)就會(huì)有可能內(nèi)存不足,不信你增大人數(shù),比如計(jì)算100000個(gè)人的年齡可能會(huì)溢出,此為堆棧溢出,也就是沒(méi)有堆棧空間了
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
首先我們要了解一下什么是遞歸。
遞歸法,遞歸法就是利用上一個(gè)或者上幾個(gè)狀態(tài)來(lái)求取當(dāng)前狀態(tài)的值(個(gè)人看法)。也可以說(shuō)成函數(shù)自己調(diào)用自己的一種解決問(wèn)題的策略。因此遞歸法通常是依托函數(shù)來(lái)實(shí)現(xiàn)的,遞歸函數(shù)總是會(huì)有一個(gè)出口,我們?cè)诮鉀Q遞歸問(wèn)題時(shí),只需要找出遞歸的關(guān)系式以及遞歸函數(shù)的出口(這兩個(gè)可以說(shuō)是遞歸函數(shù)的核心了)。下面我將在這里舉求斐波那契值的例子帶領(lǐng)著大家具體的實(shí)踐一下遞歸法。
很顯然遞歸函數(shù)的遞推式是:fib(n) = fib(n-1)+fib(n-2)。
遞歸函數(shù)的出口是當(dāng)n為1時(shí)返回1,當(dāng)n為0時(shí)返回0。
最后遞歸函數(shù)的核心代碼就可以寫(xiě)出了:
然后總的代碼就是:
具體思路如下:
語(yǔ)句 return fib(n-1)+fib(n-2)的意思就是向前求斐波那契值,直到n-1=1,n-2=0
因?yàn)橹挥械?個(gè)和第0個(gè)斐波那契值是確定的
例:
當(dāng)n=3時(shí)
第一次調(diào)用函數(shù)fib會(huì)執(zhí)行第三條語(yǔ)句(因?yàn)閚1)這樣求回返回fib(2)+fib(1)
第二次調(diào)用函數(shù)時(shí),因?yàn)?1所有會(huì)返回fib(1)+fib(0);因?yàn)?不大于1,所以調(diào)用函數(shù)時(shí)
會(huì)執(zhí)行第二條語(yǔ)句返回1值。
第三次調(diào)用函數(shù),會(huì)執(zhí)行第一和第二條語(yǔ)句,依次返回0和1從而求得fib(2)
fib(3)=fib(2)+fib(1)
fib(2)=fib(1)+fib(0)
即fib(3)=fib(1)+fib(0)+fib(1)=2*fib(1)+fib(0)
python用遞歸函數(shù)求1+2+3+4+5的值的方法:
1、寫(xiě)出臨界條件
2、找這一次和上一次的關(guān)系
3、假設(shè)當(dāng)前函數(shù)已經(jīng)能用,調(diào)用自身計(jì)算上一次的結(jié)果,再求出本次的結(jié)果
代碼實(shí)現(xiàn)如下: