Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2015, 20:44   #11
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 474
По умолчанию

Цитата:
Сообщение от Fliiz Посмотреть сообщение
Помогите найти ошибку
Ошибка в полном непонимании метода рекурсии, а отсюда - в невозможности её реализации. И гибельность твоего положения в том, что программирование - один из профильных предметов (те, кому программирование не нужно изучают BASIC и Pascal, как - я).

Я не знаю C/C++. Думаю, что с рекурсией можно реализовать так
Код:
double const eps=1E-15;
double Recurse(double x, double r, int i)
{
    r=-r*x*(3*i-2)/(3*i);
    if (abs(r)<eps)
        return r;
    else
        return r+Recurse(x, r, i+1);
}

double add(double x)
{
    return Recurse(x,-1,1);
}
Но мне не нравится такое решение - на "более родном" мне Pascal функция Recurse была бы вложенной и не видимой вне функции add. Константа eps была бы константой, а не запрещённой на запись глобальной (дальше некуда) переменной.

Отдельное спасибо min@y™ и Аватар за формулу.
FPaul вне форума Ответить с цитированием
Старый 22.09.2015, 17:44   #12
Fliiz
Пользователь
 
Регистрация: 07.05.2015
Сообщений: 44
По умолчанию

да,если можно?
Fliiz вне форума Ответить с цитированием
Старый 22.09.2015, 21:16   #13
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 474
По умолчанию

Если можно, то - да.

Хотя, о чем ты?
FPaul вне форума Ответить с цитированием
Старый 23.09.2015, 14:47   #14
Fliiz
Пользователь
 
Регистрация: 07.05.2015
Сообщений: 44
По умолчанию

Помогите с рекурсией разобраться,ошибку найти не могу(
Код:
double recursia(double x,int i)
{
    double sum=0.0;
    double Ri=-1.0;
    Ri=-Ri*x*(3.0*i-2.0)/(3.0*i);

    if(fabs(Ri)>eps)
    {
        return sum+=Ri;
    }
    else
    {
        Ri=Ri+recursia(x,i+1);
        return sum+=Ri;
    }
}
Fliiz вне форума Ответить с цитированием
Старый 24.09.2015, 18:41   #15
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 474
По умолчанию

Fliiz, начинай думать... Это не больно.

Следи за мыслью:
0. Рассматриваю свою программу. Я её проверял в gcc. Она рабочая.
1. Для вычисления следующего слагаемого, кроме x, требуются два значения из двух переменных (предыдущее слагаемое r, и номер текущего слагаемого i). Итого - три переменных.
2. Пользователь, при нахождении значения функции должен вызвать её только с теми параметрами, от которых зависит конечный результат - add(x), а не целый ряд промежуточных add(x, -1, 1).

Итог:
1. Из программы main вызываешь функцию-обёртку add(x).
2. Функция-обёртка add(x) вызывает рекурсивную функцию Recurse(x, -1, 1).
3. Функция Recurse является рекурсивной, останавливающей рекурсию по достижении требуемой точности.

Что непонятно? Почему ты пытаешься реализовать вызов рекурсивной функции с двумя вместо трёх параметров? Чтобы понять, что нужно три переменных - реализуй вычисление в цикле.
Код:
  цикл пока abs(r)>eps
    r=-r*x*(3*i-2)/(3*i);
    i++;
    sum+=r
Видны переменные x, i, r. Переменная sum - лишь замена return.

Это я к бреду в твоих попытках реализации.
Код:
double recursia(double x,int i)
{
    double sum=0.0;
    double Ri=-1.0;
    Ri=-Ri*x*(3.0*i-2.0)/(3.0*i);  ----------т.к. Ri=1, то это выражение никак не является корректным, Ri нужно передавать среди параметров

    if(fabs(Ri)>eps)
    {
        return sum+=Ri;     --------- т.к. sum=0, то это Ri
    }
    else
    {
        Ri=Ri+recursia(x,i+1);
        return sum+=Ri;     --------- т.к. sum=0, то это Ri+recursia(x,i+1)
    }
}
P.S. Мне больше нечего добавить в этой теме по этому вопросу.

Последний раз редактировалось FPaul; 24.09.2015 в 20:09.
FPaul вне форума Ответить с цитированием
Старый 26.09.2015, 12:14   #16
Fliiz
Пользователь
 
Регистрация: 07.05.2015
Сообщений: 44
По умолчанию

Понял вообщем,спасибо
Fliiz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисление функции с разложением в ряд Тейлора gulllak Общие вопросы C/C++ 0 27.12.2012 20:11
Вычисление ф-ии разложением в ряд (C++) GUWK_Lammer Помощь студентам 0 09.02.2012 21:03
Вычисление функции разложением её в ряд Hita4 Паскаль, Turbo Pascal, PascalABC.NET 1 17.12.2011 21:00
Вычисление функции разложением её в ряд Hita4 Паскаль, Turbo Pascal, PascalABC.NET 0 12.12.2011 18:02
Вычисление функции разложением ее в ряд 5nizza77 Паскаль, Turbo Pascal, PascalABC.NET 1 15.10.2009 10:55