題目:古典問題:有一對兔子,從出生後第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後的運行結果是這樣的:
好了,這是一次意外的"泡腳"時的思考,有興趣的朋友可以關注我們的微信公衆號"空谷小莜藍",大家一起交流技術吧!
掃碼關注,資源拿不停!