java兔子繁殖总数_兔子繁殖问题即斐波那契数列的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{
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 next();
}
java兔子繁殖总数_兔子繁殖问题即斐波那契数列的java实现相关推荐
- python斐波那契数列前20项_兔子繁殖问题带来的智商碾压:斐波那契数列趣谈
本文来自公众号:超级数学建模 微信号 :supermodeling 原文标题:斐波那契数列趣谈 via 善科 by BB 一般认为斐波那契数列的提出是基于兔子的繁殖问题:如果一开始有一对兔子,它们每月 ...
- 斐波纳契数列 java_几种复杂度的斐波那契数列的Java实现
一:斐波那契数列问题的起源 13世纪初期,意大利数论家Leonardo Fibonacci在他的著作Liber Abaci中提出了兔子的繁殖问题: 如果一开始有一对刚出生的兔子,兔子的长大需要一个月, ...
- 用python语言编斐波那契数列_用python函数写斐波那契数列
斐波那契数列,又称黄金分割数列.因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为"兔子数列",指的是这样一个数列:1.1.2.3.5.8.13.21.34.--在数学上, ...
- 循环斐波那契数列_第五课:斐波那契数列(第一课时)
简介:又称黄金分割数列.因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为"兔子数列",指的是这样一个数列:1.1.2.3.5.8.13.21.34--在数学上,斐波那契数 ...
- 斐波那契数列(Java语言)
LeetCode 509 斐波那契数 LeetCode链接 斐波那契数(通常用F(n)表示)的定义: F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2),n>1由斐波那契数构成的序 ...
- 用python函数写斐波那契数列通项公式_用python函数写斐波那契数列
斐波那契数列,又称黄金分割数列.因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为"兔子数列",指的是这样一个数列:1.1.2.3.5.8.13.21.34.--在数学上, ...
- 循环斐波那契数列_剑指offer #10 斐波那契数列
(递归和循环)#10 斐波那契数列 一.斐波那契数列 定义: n = 0 , f(n) = 0 n = 1 , f(n) = 1 n > 1 , f(n) = f(n-1) + f(n-2) 思 ...
- 兔子数列(斐波那契数列)java语句的实现
兔子数列是一个经典的数列,又称黄金分割数列.因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为"兔子数列",指的是这样一个数列:1.1.2.3.5.8.13.21.34.- ...
- c语言斐波那契数列_视频丨神奇的斐波那契数列科学性与艺术性
生命是奇妙的 生命是有生命的 斐波那契数列 Fn+1=Fn+Fn-1,这个数列中的每个数字都是前两项数之和,如果是以1,1开头的自然数数列,1,1,2,3,5,8,13,21,34,55,89--这些 ...
- 【剑指offer】面试题10- I:斐波那契数列(Java)
写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项.斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其 ...
最新文章
- 计算机的一些小操作,电脑小白操作中最实用的9个技巧!
- Leetcode 33.搜索旋转排序数组 (每日一题 20210707)
- rabbitMQ教程 一篇文章看懂rabbitMQ
- 苹果手机运行python_iPhone是卖的最好的手机?用Python照样把他玩弄鼓掌之间!
- python自然场景文字识别_chineseocr
- 如何在Ubuntu上安装GCC编译器
- Redis 3.0.1 安装和配置
- 《动手学深度学习》第一天 (2.1+2.2)
- centos7 firewalld
- 计算机地址栏搜索记录怎么删除,怎么删除网址?如何删除浏览器地址栏的网址历史记录和搜索记录...
- PLSQL 教程 简单上手教程
- 流量卡之家:物联网系统解决交通拥堵 全面开启未来绿色出行
- 【axios】get和post请求用法
- 模块划分-1 功能划分
- 带自动还原魔方游戏源码
- CryEngine5 Shader调试
- K-th Largest Value
- 戴尔笔记本无线网络无法连接
- TencentOS学习笔记(1)
- 股东转让股权的条件是什么
热门文章
- Ubuntu 16.04 (Ubuntu18.04 也可以用)远程桌面(使用win10远程桌面客户端链接)和 使用vncveiwer链接的配置
- CSGO地图人物模型配置
- 泛泛而谈:白话分布式一致性与共识算法
- BZOJ5287 HNOI2018毒瘤
- 干货!图像集分类大杀器--混合黎曼度量学习
- Cannot deploy artifacts when Maven is in offline mode
- Spring MVC 详解
- 服务器开机系统进不去怎么办,开机就进BIOS进不去系统怎么处理
- php是什么电器元件,看完这个保证你认识“贴片电路板上”的每一个电子元件
- 为什么现在android UI设计能火起来?