兔子繁殖问题即斐波那契数列的java实现
2016-03-01 22:03
801 查看
斐波那契数列以兔子繁殖为例子而引入,故又称为“兔子数列”。
一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。初始有一对小兔子,假设所有兔子都不死,那么一年以后可以繁殖多少对兔子?
思路:
每月的兔子总数构成斐波那契数列:1、1、2、3、5、8、13、……。这个数列有个十分明显的特点:前面相邻两项之和,构成了后一项。
假设F(n)为第n月的兔子总数,有如下定义:F(1)=1;F(2)=1;F(n)=F(n-1)+F(n-2);
java实现代码如下:
一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。初始有一对小兔子,假设所有兔子都不死,那么一年以后可以繁殖多少对兔子?
思路:
每月的兔子总数构成斐波那契数列:1、1、2、3、5、8、13、……。这个数列有个十分明显的特点:前面相邻两项之和,构成了后一项。
假设F(n)为第n月的兔子总数,有如下定义:F(1)=1;F(2)=1;F(n)=F(n-1)+F(n-2);
java实现代码如下:
import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Fibonacci implements Generator<Integer>{ private int count = 0; protected int times = 20; public Fibonacci(){} public Fibonacci(int times){ this.times = times; } public static void main(String[] args) { //控制台输入 Scanner scanner = new Scanner(System.in); System.out.println("Please input the fibonacci n :"); String str = scanner.nextLine(); //校验正整数 Pattern pattern = Pattern.compile("^[1-9]+\\d*$"); Matcher matcher = null; while(true){ matcher = pattern.matcher(str); if(!(matcher.matches())){ System.out.println("输入不合法,请输入大于0的数字!"); str = scanner.nextLine(); }else{ break; } } int n = Integer.valueOf(str).intValue(); //递归 Fibonacci fib = new Fibonacci(n); System.out.println("Generate a Fibonacci sequence in recursion algorithm : "); for(int i = 0;i < fib.times;i++ ){ System.out.print( fib.next() + "\t\t"); if((i +1)%5 == 0){ System.out.print("\n"); } } //递推 for(int i = 0;i < n;i++){ System.out.print(fib.induceFib(i) + "\t\t"); if((i +1)%5 == 0){ System.out.print("\n"); } } } /** * 递归实现 * @param n * @return */ private int recursionFib(int n){ if(n < 2){ return 1; } return recursionFib(n-2) + recursionFib(n-1); } @Override public Integer next() { return recursionFib(count++); } /** * 归纳递推实现 * @param n * @return */ private int induceFib(int n){ int nonius1 = 1,nonius2 = 1,noniusSum = 0; if(n < 2){ return 1; } for(int i = 0;i < n;i++){ noniusSum = nonius1 + nonius2; nonius1 = nonius2; nonius2 = noniusSum; } return noniusSum; } } public interface Generator<T> { T next(); }
相关文章推荐
- Java 虚拟机与 Dalvik 虚拟机的区别
- Java中@Override的作用
- spring单元测试
- java的collection类使用
- Mybatis3+Spring4+SpringMVC4 整合
- 7、压缩与解压缩
- java JVM : Xms Xmx PermSize MaxPermSize
- 第一章 Java Web开发简介
- Java Web开发基础(1)-Servlet
- 链表的java实现与时间和空间复杂度分析
- 一个例子让你了解Java反射机制
- eclipse怎么debug调试
- 练习:判断字符串“mingrikejijavabu”中,字符“i”出现了几次,并将结果输出。
- 【JAVA知识】多线程开发
- java异常、泛型和反射
- Spring主要模块及其作用
- ThreadLocal实现方式&使用介绍—无锁化线程封闭
- java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' befo
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)(转)
- 关于js和java的一点点不同