Мне для выполнения задания потребовалось найти число Бернулли. Переписал этот код с Pascal на C++.
Код:
#include <iostream>
using namespace std;
// {подсчет числа сочетаний без факториала}
double combine(int n, int m) {
double c = 1;
for (int i = 1; i <= m; i++)
c = c * (n - i + 1) / i;
return c;
}
// {подсчет чисел Бернулли с рекурсией}
double bernoulli(int n) {
if (n == 0) return 1;
else if (n == 1) return -0.5;
else if (n > 1 && n % 2 == 1)
{
return 0; // {если N>1 и нечетное, то =0}
}
double s = 0;
for (int k = 1; k <= n; k++) {
double t = bernoulli(n - k); // {запомним результат и очистим стек памяти}
s += combine(n + 1, k + 1) * t; // {вычислим следующее значение суммы}
}
return s * (-1) / (n + 1); // {вычислим число Бернулли}
}
int main() {
int n;
cout << "n = ";
cin >> n;
cout << bernoulli(n);
return 0;
}
Полезные ссылки:
- Вот отсюда брал код на Pascal, который при помощи нейросети переделал в C++
- Вот ещё нормальная ссылка про более понятный код для вычисления чисел Бернулли. На эту ссылку можно наткнуться через первую: пользователь "ФедосеевПавел" поясняет за это.
- Страницы журнала "Квант" про числа Бернулли
- Страница на Википедии: там есть таблица с уже вычисленными значениями чисел Бернулли - удобно сравнить результат работы программы с ней