题目:古典问题:有一对兔子,从出生后第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后的运行结果是这样的:
好了,这是一次意外的"泡脚"时的思考,有兴趣的朋友可以关注我们的微信公众号"空谷小莜蓝",大家一起交流技术吧!
扫码关注,资源拿不停!