fork download
  1. int arr[50];
  2.  
  3. int f(int a, int b=0) {
  4. if (b==-1) return 1;
  5. if (a==1) return 0;
  6. if (a==2) return 2;
  7. int r=f(a-2, arr[a-1]);
  8. int l=f(a-1, arr[a-2]);
  9. return (l+r);
  10. }
  11.  
  12. int f2(int a, int b=0, int s=0) {
  13. for(;;) {
  14. if (b==-1) return s+1;
  15. if (a==1) return s;
  16. if (a==2) return s+2;
  17. s = f2(a-2, arr[a-1], s);
  18. b = arr[a-2];
  19. a = a-1;
  20. }
  21. }
  22.  
  23. #include <iostream>
  24. #include <ctime>
  25. int main() {
  26. clock_t begin = clock();
  27. int s=0;
  28. for(int i=1; i<41; ++i)
  29. s += f(i);
  30. clock_t diff = clock()-begin;
  31. std::cout << s << ':' << double(diff)/CLOCKS_PER_SEC << '\n';
  32.  
  33. begin = clock();
  34. s=0;
  35. for(int i=1; i<41; ++i)
  36. s += f2(i);
  37. diff = clock()-begin;
  38. std::cout << s << ':' << double(diff)/CLOCKS_PER_SEC << '\n';
  39. }
Success #stdin #stdout 3.79s 2928KB
stdin
Standard input is empty
stdout
331160280:1.98
331160280:1.81