Вычисление рекуррентных рядов

Буду очень благодарен за помощь в решении. Я не понимаю как сделать формулу самовоспроизводимой (чтобы она масштабировалась под любые введенные числа). Прикрепляю мое решение (работает верно только для введенной 1) и скрин условия.

введите сюда описание изображения

#include <iostream>
#include <stdlib.h>;
#include <cmath>;

using namespace std;

unsigned long long Factr(int n) { //Функция поиска факториала
     unsigned long long factorial = 1;                                   
     for (int i = 2; i <= n; i++) {                                      
           factorial *= i;
     }
     return factorial;
}

double RyadiTen(int n) {   //Основная функция
    int power = 1;
    int factrMinus = 0;
    int sinus = 12;
    double y = 0;
    while (n > 0) {
        y += (Factr(n)) / (pow(sin(sinus),power));
        power += 1;
        factrMinus += 1;
        sinus += 2;
        n -= 1;
    }
    return y;
}
int  main()
{
  setlocale(LC_ALL, "RUS");

  int n;
  cout << "Введите любое целое число и программа высчитает значение по формуле, описанной в 
  пункте 10, задачи Ряды в 5 ДЗ: " << endl;
  cin >> n;
  cout << "Вычисленное значние равно: " << RyadiTen(n);
}

Ответы (1 шт):

Автор решения: Harry

Я бы, исходя из представления ряда как

введите сюда описание изображения

делал примерно так:

double y(unsigned int n)
{
    unsigned long long f = 1;
    for(int i = 1; i <= n; ++i) f *= i;
    double d = 0, s = 0;

    for(int i = 1; i <= n; ++i)
    {
        d += sin(10+2*i);
        s += f/pow(d,i);
        f /= (n+1-i);
    }
    return s;
}

Если же надо работать при n > 20 — надо unsigned long long заменить на double.

P.S. В принципе, ряд можно преобразовать в

введите сюда описание изображения

но особого упрощения вычислений это не дает.

→ Ссылка