關於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後的運行結果是這樣的:

好了,這是一次意外的"泡腳"時的思考,有興趣的朋友可以關注我們的微信公衆號"空谷小莜藍",大家一起交流技術吧!

                                                                  

                                                                              掃碼關注,資源拿不停!

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