首先我們要了解一下什么是遞歸。
專(zhuān)注于為中小企業(yè)提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)鄱陽(yáng)免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千多家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
遞歸法,遞歸法就是利用上一個(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)
就是調(diào)用fib函數(shù)
#可以分開(kāi)表示成:
n=int(sys.argv[1])
#[python?fibo.py?1]這么執(zhí)行?
#sys.argv里面存放的是命令行參數(shù),argv[0]是腳本名(fibo.py),argv[1]里是第一個(gè)參數(shù)(1),因?yàn)楂@取的是字符串,所以int轉(zhuǎn)為整形
fib(n)
如果解決了您的問(wèn)題請(qǐng)采納!
如果未解決請(qǐng)繼續(xù)追問(wèn)
1 這是一個(gè) Fibonacci 數(shù)列的計(jì)算函數(shù),使用了遞歸的方法
f(n) = 1, n=1
f(n) = n*f(n-1), n1
2 這個(gè)只有函數(shù),沒(méi)有執(zhí)行代碼
可以加上 print fib(2) 之類(lèi)的
3 記住這是 Python,靠縮進(jìn)來(lái)區(qū)分代碼的分級(jí),沒(méi)有 end if 的語(yǔ)法
=========================================
函數(shù)開(kāi)始處不是寫(xiě)了輸出語(yǔ)句嗎: print 'n =', n
return 是返回值啊
值可以用來(lái)給其他的變量賦值,或用于其他的函數(shù)中
如 x=fib(3)
沒(méi)有返回值的話(huà),就只能單獨(dú)調(diào)用了
fib(3)