时间复杂度与空间复杂度

时间复杂度
image.png

image.png

斐波那契的三种解法

  1. #include <iostream>
  2. using namespace std;
  3. // 递归形式
  4. long double fb1(int n)
  5. {
  6. if(n<1)
  7. {
  8. return -1;
  9. }
  10. if(n==1||n==2)
  11. {
  12. return 1;
  13. }
  14. return fb1(n-1)+fb1(n-2);
  15. }
  16. //数组形式存储,动态规划 时间复杂度O(n),空间复杂度O(n)
  17. long double fb2(int n )
  18. {
  19. if(n<1)
  20. return -1;
  21. int *p =new int[n+1];
  22. p[1] = p[2] =1;
  23. for(int i=3;i<=n;i++)
  24. {
  25. p[i]=p[i-1]+p[i-2];
  26. }
  27. long double res = p[n];
  28. delete []p;
  29. return res;
  30. }
  31. //时间复杂度O(n),空间复杂度O(1)
  32. long double fb3(int n)
  33. {
  34. if(n<1)
  35. return -1;
  36. long double s1,s2;
  37. s1 = s2 =1;
  38. for(int i=3;i<=n;i++)
  39. {
  40. s2 = s1 + s2;
  41. s1 = s2 -s1;
  42. }
  43. return s2;
  44. }
  45. int main() {
  46. long double result = fb1(20);
  47. cout << result << endl;
  48. long double result2 = fb2(20);
  49. cout << result2 << endl;
  50. long double result3 = fb2(20);
  51. cout << result3 << endl;
  52. std::cout << "Hello, World!" << std::endl;
  53. return 0;
  54. }
/home/er/dsa/p1/cmake-build-debug/p1
6765
6765
6765
Hello, World!

斐波那契 、复杂度 - 图3 My Github