2021-02-04:第一年農(nóng)場有1只成熟的母牛A藻糖,往后的每年:①每一只成熟的母牛都會(huì)生一只母牛 ②每一只新出生的母牛都在出生的第三年成熟 ③每一只母牛永遠(yuǎn)不會(huì)死 。請問N年后牛的數(shù)量是多少 库车?

2021-02-04:第一年農(nóng)場有1只成熟的母牛A颖御,往后的每年:①每一只成熟的母牛都會(huì)生一只母牛 ②每一只新出生的母牛都在出生的第三年成熟 ③每一只母牛永遠(yuǎn)不會(huì)死 。請問N年后牛的數(shù)量是多少 凝颇?
福哥答案2021-02-04:

舉例:
N=6,第1年1頭成熟母牛記為a疹鳄;
第2年a生了新的小母牛拧略,記為b,總牛數(shù)為2瘪弓;
第3年a生了新的小母牛垫蛆,記為c,總數(shù)為3腺怯;
第4年a生了新牛d袱饭,總數(shù)4;
第5年b成熟了呛占,ab分別生了一只虑乖,總數(shù)為6;
第6年c也成熟了晾虑,abc分別生了一只疹味,總數(shù)為9,故返回9.

遞推式是f(n)=f(n-1)+f(n-3)帜篇。

如果某個(gè)遞歸糙捺,除了初始項(xiàng)之外,具有如下的形式:
F(N) = C1 * F(N) + C2 * F(N-1) + … + Ck * F(N-k) ( C1…Ck 和k都是常數(shù))笙隙。
并且這個(gè)遞歸的表達(dá)式是嚴(yán)格的洪灯、不隨條件轉(zhuǎn)移的。那么都存在類似斐波那契數(shù)列的優(yōu)化竟痰,時(shí)間復(fù)雜度都能優(yōu)化成O(logN)签钩。

代碼用golang編寫,代碼如下:

package main

import "fmt"

func main() {
    fmt.Println(c3(6))
}
func c3(n int) int {
    if n < 1 {
        return 0
    }
    if n == 1 || n == 2 || n == 3 {
        return n
    }
    base := [][]int{
        {1, 1, 0},
        {0, 0, 1},
        {1, 0, 0}}
    res := matrixPower(base, n-3)
    return 3*res[0][0] + 2*res[1][0] + res[2][0]
}

//矩陣的p次方
func matrixPower(m [][]int, p int) [][]int {
    mLen := len(m)
    m0Len := len(m[0])
    res := make([][]int, mLen)
    for i := 0; i < mLen; i++ {
        res[i] = make([]int, m0Len)
    }

    for i := 0; i < mLen; i++ {
        res[i][i] = 1
    }

    tmp := m
    for ; p != 0; p >>= 1 {
        if p&1 != 0 {
            res = muliMatrix(res, tmp)
        }
        tmp = muliMatrix(tmp, tmp)
    }
    return res
}

//兩個(gè)矩陣相乘
func muliMatrix(m1 [][]int, m2 [][]int) [][]int {
    m1Len := len(m1)
    m20Len := len(m2[0])
    m2Len := len(m2)
    res := make([][]int, m1Len)
    for i := 0; i < m1Len; i++ {
        res[i] = make([]int, m20Len)
    }

    for i := 0; i < m1Len; i++ {
        for j := 0; j < m20Len; j++ {
            for k := 0; k < m2Len; k++ {
                res[i][j] += m1[i][k] * m2[k][j]
            }
        }
    }

    return res
}

執(zhí)行結(jié)果如下:


在這里插入圖片描述

答案參考左神的java代碼
評論

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凯亮,一起剝皮案震驚了整個(gè)濱河市边臼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌假消,老刑警劉巖柠并,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡臼予,警方通過查閱死者的電腦和手機(jī)鸣戴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來粘拾,“玉大人窄锅,你說我怎么就攤上這事$止停” “怎么了入偷?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長械哟。 經(jīng)常有香客問我疏之,道長,這世上最難降的妖魔是什么暇咆? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任锋爪,我火速辦了婚禮,結(jié)果婚禮上爸业,老公的妹妹穿的比我還像新娘其骄。我一直安慰自己,他們只是感情好扯旷,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布拯爽。 她就那樣靜靜地躺著,像睡著了一般薄霜。 火紅的嫁衣襯著肌膚如雪某抓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天惰瓜,我揣著相機(jī)與錄音否副,去河邊找鬼。 笑死崎坊,一個(gè)胖子當(dāng)著我的面吹牛备禀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播奈揍,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼曲尸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了男翰?” 一聲冷哼從身側(cè)響起另患,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛾绎,沒想到半個(gè)月后昆箕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鸦列,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年鹏倘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了薯嗤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡纤泵,死狀恐怖骆姐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情捏题,我是刑警寧澤玻褪,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站公荧,受9級特大地震影響归园,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜稚矿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望捻浦。 院中可真熱鬧晤揣,春花似錦、人聲如沸朱灿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盗扒。三九已至跪楞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間侣灶,已是汗流浹背甸祭。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留褥影,地道東北人池户。 一個(gè)月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像凡怎,于是被迫代替她去往敵國和親校焦。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容