JAVA 遞迴與非遞迴斐波那契數列的實現
阿新 • • 發佈:2019-01-29
今天練習時碰到斐波那契數列,迴圈和遞迴的程式碼分別統計了一下執行時間。遞迴還是相當慢的。
找了一篇介紹比較詳細的博文,閒暇時可以再看看。 連結
1package exrcise; public class Demo1 { public static void main(String[] args) { /* * 用迴圈實現不死神兔 故事得從西元1202年說起,話說有一位義大利青年,名叫斐波那契。 在他的一部著作中提出了一個有趣的問題:假設一對剛出生的小兔一個月後就能長成大兔, 再過一個月就能生下一對小兔,並且此後每個月都生一對小兔,一年內沒有發生死亡, 問:一對剛出生的兔子,一年內繁殖成多少對兔子? 1 1 2 3 5 8 13 21 * */ long start = System.currentTimeMillis(); int month = 44; fibonacci(month); long end = System.currentTimeMillis(); System.out.println("--------------------------------------------"); long used = end - start; System.out.println("當前程式耗時:" + used + "ms."); System.out.println("--------------------------------------------"); long start1 = System.currentTimeMillis(); System.out.println(cFibonacci(44)); long end1 = System.currentTimeMillis(); long used1 = end1 - start1; System.out.println("當前程式耗時:" + used1 + "ms."); } private static long cFibonacci(int month) { if(month == 1 || month == 2) { return 1; }else { return cFibonacci(month-1) + cFibonacci(month - 2); } } private static void fibonacci(int month) { long nextMonth = 1; long thisMonth = 1; long temp = 0; for(int i=1; i<=month; i++) { if(i <= 2) { nextMonth = 1; }else { temp = nextMonth; nextMonth = nextMonth + thisMonth; thisMonth = temp; } System.out.println(nextMonth); } } }
1
2
...
701408733
--------------------------------------------
當前程式耗時:4ms.
--------------------------------------------
701408733
當前程式耗時:2793ms.