兔子繁殖问题即斐波那契数列的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();
}

Python实现代码如下:

函数定义
def fibs(num):
    result = [0, 1]
    for i in range(num - 2):
        result.append(result[-2] + result[-1])
    return result

调用:
fibs(10)
结果:
[0,1,1,2,3,5,8,13,21,34]


 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值