Вычисление рекуррентных рядов
Буду очень благодарен за помощь в решении. Я не понимаю как сделать формулу самовоспроизводимой (чтобы она масштабировалась под любые введенные числа). Прикрепляю мое решение (работает верно только для введенной 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. В принципе, ряд можно преобразовать в
но особого упрощения вычислений это не дает.


