java学习笔记之斐波那契数列

hello 大家好

今天有个小问题:讲的是在一个小岛上,理想条件下有一对兔子,经过两个月生长后会第三个月开始每个月生殖一对兔子,问个月多少兔子?

通过这个图相信大家理解啦,就是兔子生下来第三个月第一对红的生了一对绿的,绿的长大后第三个月会再生,而第四个月红的又生了一个蓝的,以此类推

看数值变化我们也看到了规律,就是前两天之和是后一天的;

这时候我们就可以下一个方法来实现这个函数

首先我们建一个工程java project 然后点击工程,右击src,new一个class ,在主函数下边写我们的方法

public static void main(String[] args) 
	{
	}
	public static void rabbitNum()
	{
		int moth1=1;//初始化为第一月兔子数量
		int moth2=2;//初始化为第二月兔子数量
		int sum=0;//兔子数量
		int i=3;
		while(i<=30)
		{
			
			sum=moth1+moth2;//前两月之和就是当月兔子数量
			System.out.println("第"+i+"月兔子数量"+sum);
			moth1=moth2;
			moth2=sum;
			i++;
			
		}

  

然后在主函数中写我们调用方法语句:

public static void main(String[] args) 
	{
		Funtion.rabbitNum();
	}

  运行查看我们结果:

我们观察结果,发现和我们想要的一样 在这个函数中我们用的while循环,因为兔子总数用int存储的,这要考虑到int的存储大小,天数超过37好像就不行啦,需要开更大的整型去存储。

我们来写另一个优化的方法,这次我们用for循环写:

public static void rabbitNum2()
	{
		int moth1=1;
		int moth2=2;
		for(int i=3;i<=30;i++)
		{
			moth1=moth1+moth2;
			moth2=moth2+moth1;
			System.out.println("第"+i+"月的兔子数量"+moth1);
			System.out.println("第"+ ++i +"月的兔子数量"+moth2);
		}
	}

  然后写我们调用方法的语句

public static void main(String[] args) 
	{
		//Funtion.rabbitNum();
		Funtion.rabbitNum2();
	}

  这里我们还是把一个语句注释掉,只调用第二种方法:

运行观察结果,你会发现和第一种一样:

这个代码中涉及到了:

++i  是先做自增在进行别的运算,比如此代码中就是先自己加一代表下一天,然后执行被打印出来,如果换成i++就会结果出现重复月,但是数量还是正确,这就是所说的顺序执行问题。

这个代码为啥说优化啦,因为循环次数减少一半,一次循环输出两个月的结果。

posted @ 2017-08-06 10:20  窦光大大存大大凯  阅读(301)  评论(0)    收藏  举报