兔子繁殖问题即斐波那契数列的java实现

来源:互联网 发布:电脑课本软件 编辑:程序博客网 时间:2024/04/30 02:20
斐波那契数列以兔子繁殖为例子而引入,故又称为“兔子数列”。
一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。初始有一对小兔子,假设所有兔子都不死,那么一年以后可以繁殖多少对兔子?
思路:                                                    
每月的兔子总数构成斐波那契数列: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);}@Overridepublic 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();}



0 0
原创粉丝点击