c++ Рекуррентные отношения

У меня есть программа, я хочу заменить pow на цикл ( чтобы все работало также ). Я хочу сделать так , чтобы определенный элемент в цикле ( j1, к примеру) вызывался только вместе с i1 ( а не так , что вначале проработает j весь, а потом весь i( использовав всю j). Или посоветуйте другой способ реализации моей идеи ( замены pow).

#include <iostream>
#include <limits.h>
#include <math.h>

using namespace std;

void fun(int n, int x0, int xm, double dx)
{
    double y = 0;
    int a = 1;

    for (double x = x0; x <= xm; x += dx)
    {
        for (int j = n; j >= 0; --j) // вместо этого цикла и a была функция pow 
        {
            a *= x0;
        }
        y = 0; 
        for (int i = n; i >= 0; --i)
        {
            y += (2 * i + 1) * a;
        }
        cout << " x =" << x << '\t' << "y=" << y << endl;
    }
}

int  main()
{

    int n, x0 = 2, xm = 4;
    double dx = 0.25;
    cin >> n;
    fun(n, x0, xm, dx);
}

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

Автор решения: AR Hovsepyan

Посмотрим что выполняет цикл

  for (int i = n; i >= 0; --i)
    {
        y += (2 * i + 1) * a;
    }

это (n + 1) * a + a * ( 0 + 2 * 1 + 2 * 2 + ... + 2 * n). И, так как ряд является простой арифметической прогрессией c количеством членов n + 1 с нулевым первым членом, то из формулы

Sn = (a1 + d * (n-1) /2) * n, где разность прогрессии d == 2, и с учетом того, что вместо n имеем n + 1, то получим

Sn = (a1 + n ) * (n + 1) = n * (n + 1)

и, соответственно

y = (n + 1) * a + a * n(n + 1), и упростив получим результат работы всего цикла простой формулой:

y = a *(n + 1) * (n + 1)

Так что ваш цикл вовсе не нужен

→ Ссылка
Автор решения: Привет Амлет
#include <iostream>
#include <limits.h>
#include <math.h>

using namespace std;

void fun(int n, int x0, int xm, double dx)
{
 double y = 0;

 for (double x = x0; x <= xm; x += dx)
 {
  y = 0;
  for (int i = n; i >= 0; --i)
  {
   double var = 1;
   for(int j = 0;j < i; j++)
   {
    var *= x;
   }
   y += (2 * i + 1) * var;
  }
  cout << " x =" << x << '\t' << "y=" << y << endl;
 }
}

int  main()
{

 int n, x0 = 2, xm = 4;
 double dx = 0.25;
 cin >> n;
 fun(n, x0, xm, dx);
}

Суть моего ответа заключается в поиске аналога функции pow ( что я и сделал , заменил на цикл ) . В принципе все.

→ Ссылка