久久久精品2019免费观看_亚洲国产精品成人久久久_69国产成人综合久久精品91_国产精品久久精品视

Python算法:用遞歸函數(shù)實現(xiàn)斐波拉契數(shù)列應用

首先要知道什么是斐波拉契數(shù)列,像1,1,2,3,5,8,13,21……這樣,第n位的數(shù)字是第(n – 1) 位上的數(shù)+ (n – 2)位上的數(shù)的和。

這個用遞歸函數(shù)實現(xiàn)很簡單只要調(diào)用下面的函數(shù)就可以了:

def fac(n):
    if n ==1:
        return 1
    else:
        return n*fac(n-1)

?但是應用卻并不簡單,首先你得確定,這個到底是不是斐波拉契數(shù)列,如下面的例子:

應用:

有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問第十個月會有多少兔子?

?很多人一看是斐波拉契數(shù)列應用就直接調(diào)用上面代碼,

代碼:

def fib(n):
    if n == 1 or n == 2:
        return 1
    return fib(n - 1) + fib(n - 2)


print(fib(10))

運行結果:

55

但是,我們可以很清楚的知道,第三個是4只兔子,而用這個調(diào)用還是2只。解析如下:

2 2
2 2
2(可生)+2(一個月兔) 4
2(可生)+2(二個月兔,下月可生)+2(一個月兔) 6
4(可生)+2(二個月兔,下月可生)+4(一個月兔) 10
6(可生)+4(二個月兔,下月可生) + 6(一個月兔)16

上面是兔子每個月的個數(shù),可以看出從3月開始,每個月兔子的個數(shù)是前2個月的和,可以應用,但是第一第二個月卻要返回2,正確的代碼應該如下:

def fib(n):
if n == 1 or n == 2:
return 2
return fib(n - 1) + fib(n - 2)

?一個小小的不注意,數(shù)量少了一半!所以再次提醒各位審題一定要仔細

未經(jīng)允許不得轉(zhuǎn)載:445IT之家 » Python算法:用遞歸函數(shù)實現(xiàn)斐波拉契數(shù)列應用

贊 (6) 打賞

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

微信掃一掃打賞