关于Java解决斐波那契数列的一些想法

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?

程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....

①学过C++后马上想到这是典型的递归函数的问题,用Java解决的话,源代码可以是这样:(java小白刚接触):

class feibonaqie
{
	public static void main(String[] args)
	{
		int n = 10;
		System.out.println("第" + n + "月,兔子的数量是" + fun(n));
	}
	
	private static int fun(int n)
	{
		if (n == 1 || n == 2)
		{
			return 1;
		}
		else
		{
			return (fun(n-1) + fun(n-2));
		}
	}
}

现在程序默认的n是10,即算出来的是10个月后兔子的综述是多少。

程序结果截图是这样的:

②后来想到Python中经常使用n = int(input(""))来和用户进行交互,那Java里到底该怎么办呢?我也想随便输入一个数字,然后执行程序,这样岂不是很有意思,于是改进了代码是这样的:

import javax.swing.JOptionPane;
class feibonaqie
{
	public static void main(String[] args)
	{
		int n = Integer.parseInt(JOptionPane.showInputDialog("请输入你想输入的n的值:"));
		System.out.println("第" + n + "月,兔子的数量是" + fun(n));
	}
	
	private static int fun(int n)
	{
		if (n == 1 || n == 2)
		{
			return 1;
		}
		else
		{
			return (fun(n-1) + fun(n-2));
		}
	}
}

其中,使用了Java的一个库:javax.swing.JOptionPane

我作死的输入了10000,结果程序执行了好长时间,风扇也在呼呼的响(之前Python用多了,数据大小不敏感,我输入之前甚至感觉10000挺小的),后来用Python算了一下,10000月相当于833.333333334年,这意味着这个兔子不死,也早已跟王八差不多了,成精了,当时哭笑不得!

程序运行结果截图是:

最后的一个想法是:Python经常要用到import time后starttime = time.time(),endtime = time.time()来算出程序或者是CPU的运行时间,况且我上面的程序运行花了那么久时间,那么Java中该怎么实现程序的记时呢?改进后的代码如下:

import javax.swing.JOptionPane;
import java.util.Calendar;
class feibonaqie
{
	long endTime = Calendar.getInstance().getTimeInMillis();
	public static void main(String[] args)
	{
		int n = Integer.parseInt(JOptionPane.showInputDialog("请输入你想输入的n的值:"));
		long startTime = Calendar.getInstance().getTimeInMillis();
		System.out.println("第" + n + "月,兔子的数量是" + fun(n));
		var e = new feibonaqie();
		System.out.println("程序运行时间是:" + (e.endTime - startTime) + "ms");
	}
	
	private static int fun(int n)
	{
		if (n == 1 || n == 2)
		{
			return 1;
		}
		else
		{
			return (fun(n-1) + fun(n-2));
		}
	}
}

输入10后的运行结果是这样的:

好了,这是一次意外的"泡脚"时的思考,有兴趣的朋友可以关注我们的微信公众号"空谷小莜蓝",大家一起交流技术吧!

                                                                  

                                                                              扫码关注,资源拿不停!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章