程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#解決從農夫養牛問題推廣到斐波那契數列

C#解決從農夫養牛問題推廣到斐波那契數列

編輯:C#入門知識

一個農夫養了一頭牛,三年後,這頭牛每年會生出1頭牛,生出來的牛三年後,又可以每年生出一頭牛……問農夫10年後有多少頭牛?n年呢?

這裡主要談一下解決這種問題的思想。首先可以聯系斐波那契數列,設f(n)為第n年的牛,則 f(n) = f(n - 1) + f(n - 2)————>表達式1-1 即第n年的牛為去年牛的個數f(n - 1)加上今年出生牛的個數,那麼今年有多少頭牛能生呢?(不考慮死亡的牛)則為前年牛的個數即f(n - 2),因為前年的牛今年至少3歲,即為表達式1-1。     推廣一下,將牛生育年齡設為m,那麼計算的表達式就變為 f(n) = f(n - 1) + f(n - m + 1)————>表達式1-2 即n-1年牛的個數加上n-m+1年的牛生出的小牛。   那麼下面討論一個稍微復雜點的問題,如果增加一個條件,即牛會在第8年死去,那麼第n年會有多少條牛呢? 為了便於推導,這裡先設幾個函數: ·         f(n)即第n年牛的個數 ·         h(n)即第n年出生的牛的個數 ·         g(n)即第n年死亡的牛的個數 那麼這裡可以首先想到一個表達式: (1)f(n) = f(n -1) + h(n) - g(n) 即第n年牛的個數為第n-1年牛的個數+第n年出生的牛的個數-第n年死亡的牛的個數 而第二個表達式即關於新增牛的個數h(n)的: (2)h(n) = f(n - 2) - g(n - 1) 即第n年出生的牛的個數為第n-2年牛的個數減去在第n-1年死亡的牛的個數 再看第三個表達式關於第n年死亡的牛的個數的: (3)g(n)=h(n - 7) 即第n年死亡的牛的個數為第n - 7年出生的牛的個數,這是一個對稱的關系。   推導的步驟如下,將(2)代入(1) 即f(n) = f(n - 1) + f(n - 2)- g(n - 1) - g(n)---->(4) 再將(3)式代入(4) 即f(n) = f(n - 1) + f(n - 2) - h(n - 8) - h(n - 7)----->(5) 再將(2)式代入(5)的h(n - 7) 即f(n) = f(n - 1) + f(n - 2) - (h(n - 8) + f(n - 9) - g(n - 8)) 到了這裡不難看出(h(n - 8) + f(n - 9) - g(n - 8))即為f(n - 8)通過式(1)。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved