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

創(chuàng)新互聯(lián)公司是一家專業(yè)提供云和企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、HTML5、小程序制作等業(yè)務(wù)。10年已為云和眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。
可以看出來的是,該題可以用斐波那契數(shù)列解決。
樓梯一共有n層,每次只能走1層或者2層,而要走到最終的n層。不是從n-1或者就是n-2來的。
F(1) = 1
F(2) = 2
F(n) = F(n-1) + F(n-2) (n=3)
這是遞歸寫法,但是會(huì)導(dǎo)致棧溢出。在計(jì)算機(jī)中,函數(shù)的調(diào)用是通過棧進(jìn)行實(shí)現(xiàn)的,如果遞歸調(diào)用的次數(shù)過多,就會(huì)導(dǎo)致棧溢出。
針對(duì)這種情況就要使用方法二,改成非遞歸函數(shù)。
將遞歸進(jìn)行改寫,實(shí)現(xiàn)循環(huán)就不會(huì)導(dǎo)致棧溢出
首先我們要了解一下什么是遞歸。
遞歸法,遞歸法就是利用上一個(gè)或者上幾個(gè)狀態(tài)來求取當(dāng)前狀態(tài)的值(個(gè)人看法)。也可以說成函數(shù)自己調(diào)用自己的一種解決問題的策略。因此遞歸法通常是依托函數(shù)來實(shí)現(xiàn)的,遞歸函數(shù)總是會(huì)有一個(gè)出口,我們?cè)诮鉀Q遞歸問題時(shí),只需要找出遞歸的關(guān)系式以及遞歸函數(shù)的出口(這兩個(gè)可以說是遞歸函數(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ù)的核心代碼就可以寫出了:
然后總的代碼就是:
具體思路如下:
語句 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à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í)行第二條語句返回1值。
第三次調(diào)用函數(shù),會(huì)執(zhí)行第一和第二條語句,依次返回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ù)遞歸的詞條
URL地址:http://www.chinadenli.net/article20/heoejo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、品牌網(wǎng)站建設(shè)、網(wǎng)站排名、ChatGPT、定制網(wǎng)站、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)