在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/C++  GO  HTML/ 想不明白這遞歸是怎么樣的

想不明白這遞歸是怎么樣的

遞歸這個(gè)概念我懂的,我把值都打印出來了,他是怎么把 斐波那契數(shù)列 打印出來的

for i := 0; i < 10; i++ {
        fmt.Println(Fib(i))
    }


//遞歸
func Fib(n int) int {
    if n < 2 {
        return n
    }
    a := Fib(n - 1)
    b := Fib(n - 2)
    fmt.Print("遞歸值:", a, b, "\n")
    return a + b
}

打印部分結(jié)果說明

0
1
遞歸值:1 0
1
遞歸值:1 0
遞歸值:1 1
2
遞歸值:1 0
遞歸值:1 1
遞歸值:1 0
遞歸值:2 1
3
遞歸值:1 0
遞歸值:1 1
遞歸值:1 0
遞歸值:2 1
遞歸值:1 0
遞歸值:1 1
遞歸值:3 2
5

不甚理解呀,請(qǐng)求大神指點(diǎn)。。。謝謝!

回答
編輯回答
冷眸

首先,n<2 類似于初始化,F(xiàn)ib(0) = 0, Fib(1) = 1;第一個(gè)return就返回了,不會(huì)執(zhí)行下面的打印。
然后,n>2時(shí),F(xiàn)ib(2) = Fib(1) + Fib(0),會(huì)打印Fib(1)和Fib(0)。
這個(gè)就是斐波那契數(shù)列的一邊表達(dá)式:f(n) = f(n-1) + f(n-2)。

2018年4月8日 16:10
編輯回答
溫衫
0  f(0) =0

1   f(1) =1

1   f(2) = f(0)+f(1) 

2   f(3) =  f(2)+f(1) 

我昨天回家后,細(xì)細(xì)想了下 打印出來的結(jié)果反而是誤導(dǎo)我了。 正確的理解,應(yīng)該是這樣。謝謝答主!

2017年10月6日 02:08