Как правильно сделать рекурсию формулы в C++. Возведение в степень не через pow()
есть формула, которую надо сделать через рекурсию. Число n заданно в файле под названием input.txt
Формула: Сумма от i=1 до n = 2i/2^i+1
Моя проблема в том что не могу сделать возведение степень не через pow()
Код программы
#include <iostream>
#include <fstream>
using namespace std;
double series(int n)
{
double sum;
if (n == 0)
{return 0;} // 2i/1+2^i
else
{
sum = ((double)(2*n) / (double)(2*n + 1)) + series(n - 1);
return sum;
}
}
int main()
{
ifstream fin;
fin.open("input.txt");
if (!fin) return 1;
int n;
fin >> n;
double sum = series(n);
cout << sum;
fin.close();
return 0;
}
По моим расчетам если n=2 то ответ будет 1.466666 приблизительно
Ответы (1 шт):
Автор решения: Павел Ериков
→ Ссылка
Вот как пример кода:
double series_step(int i, int n, int fact)
{
if (i > n)
return 0;
return ((double)i * 2) / ((double)fact + 1) + series_step(i + 1, n, fact * 2);
}
double series(int n) {
return series_step(1, n, 2);
}
То есть начинаем с i = 1 и fact = 2 и каждую итерацию мы увеличиваем i на 1, а fact умножаем на 2
Результат программы при n = 2:
1.46667