fork(1) download
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. double finite_product(int a, int b) {
  5. double product = 1.0;
  6. for (int k = a; k <= b; k++) {
  7. product *= (1.0 + 1.0 / k);
  8. }
  9. return product;
  10. }
  11.  
  12. double infinite_product_recursive(int k, double product, double eps, int max_iter, int *used) {
  13. if (*used >= max_iter) {
  14. return product; // Защита от бесконечной рекурсии
  15. }
  16.  
  17. product *= (1.0 + 1.0 / k);
  18. (*used)++;
  19.  
  20. // Проверка условия выхода
  21. if (fabs(1.0 / k) < eps) {
  22. return product;
  23. }
  24.  
  25. return infinite_product_recursive(k + 1, product, eps, max_iter, used);
  26. }
  27.  
  28. int main(void) {
  29. int a = 2, b = 31;
  30. double eps = 1e-6;
  31.  
  32. double fin = finite_product(a, b);
  33. printf("Конечное произведение (k=%d..%d): %.12f\n", a, b, fin);
  34.  
  35. int used = 0;
  36. int max_iter = 1000000; // Защита от бесконечной рекурсии
  37. double inf_prod = infinite_product_recursive(a, 1.0, eps, max_iter, &used);
  38. printf("Приближенное бесконечное произведение (eps=%.1e): %.12f\n", eps, inf_prod);
  39. printf("Использовано членов: %d (начиная с k=%d)\n", used, a);
  40.  
  41. return 0;
  42. }
  43.  
Success #stdin #stdout 0.01s 5320KB
stdin
Standard input is empty
stdout
Конечное произведение (k=2..31): 16.000000000000
Приближенное бесконечное произведение (eps=1.0e-06): 500000.999999932072
Использовано членов: 1000000 (начиная с k=2)