题目描述

Fibonacci数列求和
0, 1, 1, 2, 3, 5, 8, 13
规律:前两位分别是0、1,后面每一位是前面两位的和。

代码块

  1. package com.yue.season1.class01;
  2. import com.yue.util.TimeUtil;
  3. /**
  4. * Fibonacci数列求和
  5. * 0, 1, 1, 2, 3, 5, 8, 13
  6. * 规律:前两位分别是0、1,后面每一位是前面两位的和。
  7. */
  8. public class Fibonacci {
  9. public static long basicFibonacci(int num) {
  10. if (num <= 1) {
  11. return num;
  12. }
  13. return basicFibonacci(num - 1) + basicFibonacci(num - 2);
  14. }
  15. public static long improvedFibonacci(int num) {
  16. if (num <= 1) {
  17. return num;
  18. }
  19. long first = 0;
  20. long second = 1;
  21. long sum = num;
  22. for (int i = 0; i < num - 1; i ++) {
  23. sum = first + second;
  24. first = second;
  25. second = sum;
  26. }
  27. return sum;
  28. }
  29. public static void main(String[] args) {
  30. int num = 40;
  31. TimeUtil.check("basicFibonacci", new TimeUtil.Task() {
  32. @Override
  33. public void execute() {
  34. System.out.println(basicFibonacci(num));
  35. }
  36. });
  37. TimeUtil.check("improvedFibonacci", new TimeUtil.Task() {
  38. @Override
  39. public void execute() {
  40. System.out.println(improvedFibonacci(num));
  41. }
  42. });
  43. }
  44. }

运行结果

[basicFibonacci] 开始:2021-07-08T00:22:10.007873600 102334155 结束:2021-07-08T00:22:10.915445500

耗时:0.896秒

[improvedFibonacci] 开始:2021-07-08T00:22:10.923448900 102334155 结束:2021-07-08T00:22:10.923448900

耗时:0.0秒