fork download
  1. #include <stdio.h>
  2. #include <time.h>
  3.  
  4. // 递归实现
  5. long long fib_recursive(int n) {
  6. if (n == 1 || n == 2) return 1;
  7. return fib_recursive(n - 1) + fib_recursive(n - 2);
  8. }
  9.  
  10. // 迭代实现(从1开始)
  11. long long fib_iterative(int n) {
  12. if (n == 1 || n == 2) return 1;
  13. long long a = 1, b = 1, c;
  14. for (int i = 3; i <= n; i++) {
  15. c = a + b;
  16. a = b;
  17. b = c;
  18. }
  19. return b;
  20. }
  21.  
  22. int main() {
  23. int n = 40; // 测试较大的n值
  24. clock_t start, end;
  25. double time_used;
  26. // 测试递归方法
  27. start = clock();
  28. long long result_recursive = fib_recursive(n);
  29. end = clock();
  30. time_used = ((double)(end - start)) / CLOCKS_PER_SEC;
  31. printf("递归方法: F(%d) = %lld, 耗时: %f 秒\n", n, result_recursive, time_used);
  32.  
  33. // 测试迭代方法
  34. start = clock();
  35. long long result_iterative = fib_iterative(n);
  36. end = clock();
  37. time_used = ((double)(end - start)) / CLOCKS_PER_SEC;
  38. printf("迭代方法: F(%d) = %lld, 耗时: %f 秒\n", n, result_iterative, time_used);
  39. return 0;
  40. }
Success #stdin #stdout 0.33s 5292KB
stdin
Standard input is empty
stdout
递归方法: F(40) = 102334155, 耗时: 0.319511 秒
迭代方法: F(40) = 102334155, 耗时: 0.000000 秒