1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > java兔子繁殖总数_【Java基础编程练习】01:兔子繁殖问题(斐波那契数列)的分析及实现...

java兔子繁殖总数_【Java基础编程练习】01:兔子繁殖问题(斐波那契数列)的分析及实现...

时间:2024-05-18 07:08:57

相关推荐

java兔子繁殖总数_【Java基础编程练习】01:兔子繁殖问题(斐波那契数列)的分析及实现...

01:兔子繁殖问题

Java练习,第一道就是这道题,早有耳闻,看好多答案就是直接摆上来一个斐波那契数列就完了〒▽〒,于是自己就写了一个思考过程,仅供自己将来复习吧~

一、问题概述

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?

二、分析问题

由题意,先写几个试试找一找其中的规律:

Child(幼年兔)

Young(成长兔)

Old(成年兔)

TotalNum

1月

1

0

0

1

2月

0

1

0

1

3月

1

0

1

2

4月

1

1

1

3

5月

2

1

2

5

6月

3

2

3

8

7月

5

3

5

13

TotalNum = old + young+child

= (last old + last young) + last child + (last old +last young)

= (last old + last young + last child) + (last old +last young)

= last TotalNum + last last TotalNum

由此式可得出:本月兔子总数 = 上个月兔子总数 + 上上个月兔子总数

上式中有 last last TotalNum = last old +last young 这一等价关系,是因为last last TotalNum = last TotalNum - last child,意思就是上上个月兔子总数为,上个月的兔子总数减去其中的幼年兔的数量。

这一数列即是斐波那契数列了,从第三项开始f(n) = f(n-1) + f(n+2.)

三、代码实现

package _01_rabbitFib;

import java.util.Scanner;

public class Test {

public static void main(String[] args) {

System.out.println("第一个月有一对兔子,请输入月份:");

Scanner scanner = new Scanner(System.in);

int n=scanner.nextInt();

System.out.println("第"+n+"个月有"+Fib1(n)+"对兔子");

}

private static int Fib1(int n) {//递归实现

if(n == 1 || n == 2)

return 1;

else

return Fib1(n-1)+Fib1(n-2);

}

四、存在疑问

1. 斐波那契数列往后越来越大,如何存储它?

我想的解决方法是存在数组里?网上给出的斐波那契数溢出的问题是存在string里面,然后再从低位向高位相加进位。

2. 斐波那契的计算时间非常长,如何优化?

在网上搜索了有构造等比数列、线性代数解法、特征方程解法、母函数法,都非常有技巧性。用公式求的快但是用到根号也就会丢失精度吧。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。