斐波那契数列(Fabonacci)兔子练习题

简介:

Java练习题:兔子问题

      此问题又叫斐波那契数列(Fabonacci),是最先研究这个数列的人是比萨的列奥那多(又名费波那契),他描述兔子生长的数目时用上了这数列。

  • 第一个月有一对刚诞生的兔子
  • 第二个月之后它们可以生育
  • 每月每对可生育的兔子会诞生下一对新兔子
  • 兔子永不死去

       假设在 n 月有新生及可生育的兔子总共 a 对,n+1 月就总共有 b 对。在 n+2 月必定总共有 a+b 对: 因为在 n+2 月的时候,所有在 n 月就已存在的 a 对兔子皆已可以生育并诞下 a 对后代;同时在前一月(n+1月)之 b 对兔子中,在当月属于新诞生的兔子尚不能生育。参照下表:

所经过的月数

1

2

3

4

5

6

7

8

9

10

11

12

新诞生的兔子

0

0

1

1

2

3

5

8

13

21

34

55

兔子对数

1

1

2

3

5

8

13

21

34

55

89

144

由此可用数学归纳法定义为:

    F(n) = F(n-1)+F(n+1);(n>2,F(1)=1,F(2)=1);

如果我们用普通的迭代方法该怎么样实现呢?假设我们要打印12个月兔子的对数,代码如下:

	public static void main(String args[]) {
		
		int R[] = new int[12];  //每月的兔子数
		
		R[0] = 1;  //第一月份的兔子数
		
		R[1] = 1;  //第二月份的兔子书
		
		for (int a = 2 ; a < 12; a++) {
			R[a] = R[a-1] + R[a-2];  
			System.out.println(R[a]);
		}
	}

代码很简单,用数组实现,但我们如果用递归的话,代码更加简洁:

	public static void main(String args[]) {
		System.out.println(Fbi(12)); //打印
	}
	
	static int Fbi(int i) {
		if (i < 2) return i==0?0:1;
		return Fbi(i-1) + Fbi(i-2); //自己调用自己的函数
	}

递归的另外一种晦涩点的写法:

package com.zzk.cn;

/***
 * 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子
 * 假如兔子都不死,每个月的兔子总数为多少?
 * @author zhuzhengke
 *
 */
public class test01 {
    public static void main(String[] args) {
    	testnumber(5);
    }
    
    public static void  testnumber(int i) {
    	System.out.println("第一个月的兔子对数: 1");
    	System.out.println("第二个月的兔子对数: 1");
    	int f1=1,f2=1,f,M=24;
    	for(int k=3;k<=M;k++)               
    	{
    		f=f2;
    		f2=f1+f2;
    		f1=f;
    	System.out.println("第"+ k+"个月的兔子对数:"+f2);
    	}
    }
}



目录
相关文章
|
Linux Shell C语言
【Shell 命令集合 设备管理 】Linux控制Linux系统的键盘LED setleds命令 使用指南
【Shell 命令集合 设备管理 】Linux控制Linux系统的键盘LED setleds命令 使用指南
448 0
|
JSON 小程序 前端开发
微信小程序(二十四)微信小程序富文本编辑器editor
{ "component": true, "usingComponents": {} }
641 0
|
Java Linux PHP
15款免费IDE,推荐给开发者
本文为您推荐大量的开源、免费的IDE,精选15个免费IDE,推荐给大家。列表如下: Komodo Edit(Windows, Mac, Linux) Komodo IDE可以在Windows、Mac OS X 和 Linux上运行,并支持通用的开源语言——Perl、PHP和Ruby。
4394 0
|
存储 数据挖掘 索引
Pandas Series 和 DataFrame 常用属性详解及实例
Pandas 是 Python 数据分析的重要工具,其核心数据结构 Series 和 DataFrame 广泛应用。本文详细介绍了这两种结构的常用属性,如 `index`、`values`、`dtype` 等,并通过具体示例帮助读者更好地理解和使用这些属性,提升数据分析效率。
1019 4
|
安全 编译器 C#
C#基础知识学习之 ✨ 委托(delegate) 与 事件(event) 之间的介绍
委托(delegate) 与 事件(event) 🔥 前言🙏 在之前的文章里介绍了C#中的委托(delegate) (Action、Func、Predicate)的基本含义及用法 那本篇文章在这里还要介绍一个跟委托有很大关系的小伙伴——C#中的 事件(event)🎅 事件跟委托是有很大联系的,所以也就导致很容易分不清他们两个,以及什么时候用这两个 上面有博客提到委托,想单独了解委托的可以去看一下,本篇文章主要说一下 什么是事件 🎄 以及 事件与委托的区别🎁
C#基础知识学习之 ✨ 委托(delegate) 与 事件(event) 之间的介绍
|
网络协议 Java Maven
多模块项目使用ElasticSearch报错
多模块项目使用ElasticSearch报错
548 6
|
Go API 微服务
Golang微服务框架Kratos轻松集成并使用Swagger UI
在我们的开发当中,调试接口,测试接口,提供接口文档给前端,那都是非常频繁的工作内容。 那么,我们需要用什么方法和工具来实施这些工作内容呢? Swagger,或者说OpenAPI。
1012 0
|
程序员 Android开发
Android亮度调节的几种实现方法
Android亮度调节的几种实现方法
1200 0
|
存储 关系型数据库 数据库
从小白到专家 PostgreSQL技术大讲堂 - Part 5:PG数据库结构
从小白到专家 PostgreSQL技术大讲堂 - Part 5:PG数据库结构
591 0
从小白到专家 PostgreSQL技术大讲堂 - Part 5:PG数据库结构