Как правильно сделать рекурсию формулы в 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
→ Ссылка