分享

兔子问题

 一木尚土 2016-04-18

比萨的列奥纳多,又称斐波那契(Leonardo Pisano ,Fibonacci, Leonardo Bigollo,1175年-1250年),意大利数学家,西方第一个研究斐波那契数,并将现代书写数和乘数的位值表示法系统引入欧洲。13世纪意大利数学家斐波那契在他的《算盘书》中提出这样一个问题:有人想知道一年内一对兔子可繁殖成多少对,便筑了一道围墙把一对兔子关在里面。已知一对兔子每一个月可以生一对小兔子,而一对兔子出生后.第三个月开始生小兔子假如一年内没有发生死亡,则一对兔子一年内能繁殖成多少对?

现在我们寻求兔子繁殖的规律。成熟的一对兔子用记号"红方块表示",未成熟的用"黑方块"表示。"绿色线代表:延续和成长" "蓝色线代表:出生" 。

斐波那契数的原题为图片的下半部分:可以看出六个月兔子的对数是1,1,2,3,5,8,13。很容易发现这个数列的特点:即从第三项起,每一项都等于前两项之和。所以按这个规律写下去,便可得出一年内兔子繁殖的对数:1,1,2,3,5,8,13,21,34,55,89,144。可见一年内兔子共有144对(第一个月和第二个月都只有1对兔子)。

还有题中本质上有两类兔子:一类是能生殖的兔子,称为成年兔子;新生的兔子不能生殖;新生兔子一个月就长成成年兔子。求的是成年兔子与新生兔子的总和。每月新生兔对数等于上月成年兔对数。每月成年兔对数等于上个月成年兔对数与新生兔对数之和。

法国数学家比内(Binet)证明了通项公式为

F(1)=F(2)=1;

F(n)=F(n-1)+F(n-2) (n≥3)。

我们用机算机C语言 可以对上半张图列出以下程序:

#include "stdio.h"

#include "conio.h"

void main()

{ int i;long int f1,f2;

f1=1,f2=2;//f1代表第一个月,f2代表第二个月

for(i=1;i<=6;i++)

{

printf("%12ld%12ld",f1,f2);

f1+=f2; //斐波那契 系数为第一个月加第二个月等于第三个的值

f2+=f1; //斐波那契 系数为第一个月加第二个月等于第三个的值.

if(i%3==0)printf("\n"); // 每行列出六个数.

}

}

人们为了纪念斐波那契,就以他的名字命名这个数列为斐波那契数列,该数列的每一项称为斐波那契数斐波那契数列有许多有趣的性质。除了a(n)=a(n-1)+a(n-2)外,还可以证明它的通项公式为:

a(n)=(((1+5^(1/2))/2)^n-((1-5^(1/2))/2)^n)/5^(1/2)

可它的每一项却都是整数。而且这个数列中相邻两项的比值,越靠后其值越接近0.618黄金比例。这个数列有广泛的应用,如树的年分枝数目就遵循斐波那契数列的规律;而且计算机科学的发展,为斐波那契数列提供了新的应用场所。

而用计算机c++语言的解决方法:

#include<iostream>

using namespace std;

int main()

{

int i,a[30]={0,1,1};//数组的定义,用来储存数据

for(i=3;i<30;i++)

{

a[i]=a[i-1]+a[i-2];//Fibonacci的算术方程

}

for(i=1;i<30;i++)

{

printf("a[%d]=%d\n",i,a[i]);//输出

}

}

用计算机Java语言的解决方法(递归):

public static void main(String[] args) {

long f1 = 1;

long f2 = 1;

long fn = 1;

for (int i = 3; i < 50; i++) {

fn = f1 + f2;

f2 = f1;

f1 = fn;

System.out.println(i + "," + fn);

}

}


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多