#include <stdio.h>
#include <math.h>
double finite_product( int a, int b) {
double product = 1.0 ;
for ( int k = a; k <= b; k++ ) {
product *= ( 1.0 + 1.0 / k) ;
}
return product;
}
double infinite_product_recursive( int k, double product, double eps, int max_iter, int * used) {
if ( * used >= max_iter) {
return product; // Защита от бесконечной рекурсии
}
product *= ( 1.0 + 1.0 / k) ;
( * used) ++;
// Проверка условия выхода
if ( fabs ( 1.0 / k
) < eps
) { return product;
}
return infinite_product_recursive( k + 1 , product, eps, max_iter, used) ;
}
int main( void ) {
int a = 2 , b = 31 ;
double eps = 1e-6 ;
double fin = finite_product( a, b) ;
printf ( "Конечное произведение (k=%d..%d): %.12f\n " , a
, b
, fin
) ;
int used = 0 ;
int max_iter = 1000000 ; // Защита от бесконечной рекурсии
double inf_prod = infinite_product_recursive( a, 1.0 , eps, max_iter, & used) ;
printf ( "Приближенное бесконечное произведение (eps=%.1e): %.12f\n " , eps
, inf_prod
) ; printf ( "Использовано членов: %d (начиная с k=%d)\n " , used
, a
) ;
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+Cgpkb3VibGUgZmluaXRlX3Byb2R1Y3QoaW50IGEsIGludCBiKSB7CiAgICBkb3VibGUgcHJvZHVjdCA9IDEuMDsKICAgIGZvciAoaW50IGsgPSBhOyBrIDw9IGI7IGsrKykgewogICAgICAgIHByb2R1Y3QgKj0gKDEuMCArIDEuMCAvIGspOwogICAgfQogICAgcmV0dXJuIHByb2R1Y3Q7Cn0KCmRvdWJsZSBpbmZpbml0ZV9wcm9kdWN0X3JlY3Vyc2l2ZShpbnQgaywgZG91YmxlIHByb2R1Y3QsIGRvdWJsZSBlcHMsIGludCBtYXhfaXRlciwgaW50ICp1c2VkKSB7CiAgICBpZiAoKnVzZWQgPj0gbWF4X2l0ZXIpIHsKICAgICAgICByZXR1cm4gcHJvZHVjdDsgLy8g0JfQsNGJ0LjRgtCwINC+0YIg0LHQtdGB0LrQvtC90LXRh9C90L7QuSDRgNC10LrRg9GA0YHQuNC4CiAgICB9CgogICAgcHJvZHVjdCAqPSAoMS4wICsgMS4wIC8gayk7CiAgICAoKnVzZWQpKys7CgogICAgLy8g0J/RgNC+0LLQtdGA0LrQsCDRg9GB0LvQvtCy0LjRjyDQstGL0YXQvtC00LAKICAgIGlmIChmYWJzKDEuMCAvIGspIDwgZXBzKSB7CiAgICAgICAgcmV0dXJuIHByb2R1Y3Q7CiAgICB9CgogICAgcmV0dXJuIGluZmluaXRlX3Byb2R1Y3RfcmVjdXJzaXZlKGsgKyAxLCBwcm9kdWN0LCBlcHMsIG1heF9pdGVyLCB1c2VkKTsKfQoKaW50IG1haW4odm9pZCkgewogICAgaW50IGEgPSAyLCBiID0gMzE7CiAgICBkb3VibGUgZXBzID0gMWUtNjsKCiAgICBkb3VibGUgZmluID0gZmluaXRlX3Byb2R1Y3QoYSwgYik7CiAgICBwcmludGYoItCa0L7QvdC10YfQvdC+0LUg0L/RgNC+0LjQt9Cy0LXQtNC10L3QuNC1IChrPSVkLi4lZCk6ICUuMTJmXG4iLCBhLCBiLCBmaW4pOwoKICAgIGludCB1c2VkID0gMDsKICAgIGludCBtYXhfaXRlciA9IDEwMDAwMDA7IC8vINCX0LDRidC40YLQsCDQvtGCINCx0LXRgdC60L7QvdC10YfQvdC+0Lkg0YDQtdC60YPRgNGB0LjQuAogICAgZG91YmxlIGluZl9wcm9kID0gaW5maW5pdGVfcHJvZHVjdF9yZWN1cnNpdmUoYSwgMS4wLCBlcHMsIG1heF9pdGVyLCAmdXNlZCk7CiAgICBwcmludGYoItCf0YDQuNCx0LvQuNC20LXQvdC90L7QtSDQsdC10YHQutC+0L3QtdGH0L3QvtC1INC/0YDQvtC40LfQstC10LTQtdC90LjQtSAoZXBzPSUuMWUpOiAlLjEyZlxuIiwgZXBzLCBpbmZfcHJvZCk7CiAgICBwcmludGYoItCY0YHQv9C+0LvRjNC30L7QstCw0L3QviDRh9C70LXQvdC+0LI6ICVkICjQvdCw0YfQuNC90LDRjyDRgSBrPSVkKVxuIiwgdXNlZCwgYSk7CgogICAgcmV0dXJuIDA7Cn0K