fork download
  1. #include <stdio.h>
  2.  
  3. //varianta iterativa
  4. int fact(int n) {
  5. int p = 1;
  6. for(int i = 1; i <= n; ++i) {
  7. p *= i;
  8. }
  9. return p;
  10. }
  11.  
  12. //1,2,3,4,5
  13. //1*2*3*4*5
  14. //[1,2,3] [4,5]
  15. //[1,2],[3] [4][5]
  16. void factorial_divide_et_impera(int lo, int hi, int *res) {
  17.  
  18. int a, b;
  19.  
  20. if(lo == hi) {
  21. *res = lo;
  22. } else {
  23. int m = (lo + hi) / 2;
  24. factorial_divide_et_impera(lo, m, &a);
  25. factorial_divide_et_impera(m + 1, hi, &b);
  26. *res = a * b;
  27. }
  28. }
  29.  
  30. int main(int argc, char const *argv[]) {
  31.  
  32. int n = 5;
  33.  
  34. //5! = 1 * 2 * 3 * 4 * 5
  35. int res;
  36.  
  37. printf("5! = %d (varianta iterative clasica)\n", fact(n));
  38.  
  39. factorial_divide_et_impera(1, n, &res);
  40.  
  41. printf("5! = %d (divide et impera)", res);
  42.  
  43. return 0;
  44. }
Success #stdin #stdout 0s 5288KB
stdin
Standard input is empty
stdout
5! = 120 (varianta iterative clasica)
5! = 120 (divide et impera)