Вычислить значение произведения с помощью рекурсии - C (СИ)
Формулировка задачи:
Решить при помощи рекурсии. Написал код, но почему-то в цикл не заходит. При вводе любых значений x и n, он выводит значение переменной s.
#include <stdio.h> #include <math.h> int result; float b; int fun (int step,int x) { float b; if (step==1) return (cos(abs(x))); else return (fun(step-1,x)*cos(abs(x))); } int main() { int x, i; float s,n; printf ("\n Vvedite znachenie n\n n="); scanf ("%d", &n); printf ("\n Vvedite znachenie x\n x="); scanf ("%d", &x); s=1; for (i=1; i<=n; i++) { s=s*(((i)/(i+1)) - fun(i,x)); } printf ("\n Proizvedenie S=%.3f", s); }
Решение задачи: «Вычислить значение произведения с помощью рекурсии»
textual
Листинг программы
double cos_k (double x, int k) { if( k == 0 ) return 1; return cos(x) * cos_k(x, k - 1); } // в цикле: double dbl_i = (double)i; s = s * dbl_i / (dbl_i + 1.0) - cos_k(abs(x), i); // какой смысл вычислять abs(x) на каждом витке рекурсии?
Объяснение кода листинга программы
В данном коде представлена функция cos_k
, которая вычисляет значение произведенияcos(x) для аргумента x и степени k с помощью рекурсии.
Вот список действий, которые выполняются в этой функции:
- Если значение переменной k равно 0, то возвращается значение 1.
- В противном случае, функция возвращает произведение значения функции cos(x) и значения функции cos_k, которое вычисляется с аргументом x и уменьшенным на 1 значением переменной k. Кроме того, в коде есть цикл, в котором выполняются следующие действия:
- Переменная i преобразуется в тип double с помощью приведения типов.
- Значение переменной s умножается на значение переменной i и делится на (i + 1.0).
- К результату предыдущего шага вычитается значение функции cos_k, которое вычисляется с аргументом abs(x) (абсолютное значение переменной x) и переменной i. Однако, в данном коде есть одна особенность, которую можно улучшить - вычисление значения функции abs(x) на каждом витке цикла. Это может быть неэффективно с точки зрения производительности, так как функция abs(x) будет вызываться многократно. Вместо этого, можно сохранить значение abs(x) в отдельной переменной и использовать эту переменную в цикле. Это позволит избежать повторных вычислений и ускорит выполнение кода.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д