Вычислить значение произведения с помощью рекурсии - 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 с помощью рекурсии. Вот список действий, которые выполняются в этой функции:

  1. Если значение переменной k равно 0, то возвращается значение 1.
  2. В противном случае, функция возвращает произведение значения функции cos(x) и значения функции cos_k, которое вычисляется с аргументом x и уменьшенным на 1 значением переменной k. Кроме того, в коде есть цикл, в котором выполняются следующие действия:
  3. Переменная i преобразуется в тип double с помощью приведения типов.
  4. Значение переменной s умножается на значение переменной i и делится на (i + 1.0).
  5. К результату предыдущего шага вычитается значение функции cos_k, которое вычисляется с аргументом abs(x) (абсолютное значение переменной x) и переменной i. Однако, в данном коде есть одна особенность, которую можно улучшить - вычисление значения функции abs(x) на каждом витке цикла. Это может быть неэффективно с точки зрения производительности, так как функция abs(x) будет вызываться многократно. Вместо этого, можно сохранить значение abs(x) в отдельной переменной и использовать эту переменную в цикле. Это позволит избежать повторных вычислений и ускорит выполнение кода.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.571 из 5
Похожие ответы