日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(递推1)兔子繁殖问题

發布時間:2025/3/12 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (递推1)兔子繁殖问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

有一對小兔子,小兔子過Z個月長大,一對大兔子X個月生Y對小兔子,求n個月后的兔子總對數。
當xyz都是1的時候,f(n)=f(n-1)+f(n-2)
問題一:
有一對小兔子,小兔子過5個月長大,一對大兔子3個月生4對小兔子,求n個月后的兔子總對數。
f(n)表示n個月后的兔子總數
f(n)=n那個月原有的兔子+n那個月新生的兔子
n那個月原有的兔子是:f(n-1)
n那個月新生的兔子是:n-x那個月成熟的兔子,也就是n-x-z那個月所有的兔子,因為n-x-z那個月所有的兔子在n-x那個月的時候都成熟了

故f(n)= f(n-1)+ f(n-x-z) * (y/x);這里必須是* (y/x),這是每個月生產的。(那個月成熟的兔子在一個月里生的小兔子的個數)

這個表達式也適合于一個月生一對的情況;
一個月的情況可以看成成熟+不成熟,和原來的+新生的。而多個月的情況看成后一種比較好,因為看成前一種會超級麻煩。

到本題,也就是f(n)= f(n-1)+ f(n-8)*(4/3);

問題二:
有一對小兔子,小兔子過5個月長大,一對大兔子3個月生4對小兔子,求n個月后的大兔子總對數。
f(n)表示大兔子,那么
f(n)= 上個月的大兔子數+這個月新長成的大兔子數
上個月的大兔子數是:f(n-1)
這個月新長成的大兔子數是:因為兔子需要5個月長大,所以應該是n-5個月那個月的新出生的兔子,
n-5個月那個月的新出生的兔子是n-5-3那個月的所有大兔子數,因為大兔子經過三個月才能有小兔子,
故f(n)=f(n-1)+f(n-5-3)*(4/3);

#include <iostream> using namespace std; //前八個月的兔子總對數都是一對,initTotalRabbit[1]表示第一個月 double initTotalRabbit[9]={0,1,1,1,1,1,2.3333,3.6667,5}; double calcTotalRabbit(int n){if(n<=8)return initTotalRabbit[n];elsereturn calcTotalRabbit(n-1)+ calcTotalRabbit(n-8)*(4.0/3); } //前五個月的大兔子數目為0,initBigRabbit[1]表示第一個月的大兔子數目 double initBigRabbit[9]={0,0,0,0,0,0,1,1,1}; double calcBigRabbit(int n){if(n<=8)return initBigRabbit[n];elsereturn calcBigRabbit(n-1)+ calcBigRabbit(n-5)*(4.0/3); } int main(){for(int i=1;i<=20;i++){double total=calcTotalRabbit(i);double big=calcBigRabbit(i);printf("月份:%3d 兔子總對數:%6.2lf 大兔子對數:%6.2lf 小兔子對數:%6.2lf\n",i,total,big,total-big);}return 0; }

總結

以上是生活随笔為你收集整理的(递推1)兔子繁殖问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。