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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2015, 20:39   #21
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

ребят, тренируюсь с рекурсией, не могу составить рекурсивную функцию для обоих рядов, прошу помощи

Ребят, а как вычислить рекурсию для первого ряда? Пробовал так, циклится
Код:
#include <QCoreApplication>
#include <math.h>


float recurs(int x,int j)
{
    float a=pow(x,j)/(pow((x+1),2*j));
printf("%f\n",a);
    if (a < 0.0000001) return 0;
    else
        return a+recurs(x,j);


}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
int x1=2,j1=2;
    printf("Vvedite chislo X: ");
    scanf("%d",&x1);
    printf("Vvedite chislo J: ");
    scanf("%d",&j1);
    printf("Summ: %f",recurs(x1,j1));


    return a.exec();
}
Изображения
Тип файла: jpg рекурсия.jpg (28.9 Кб, 125 просмотров)
Тип файла: jpg саня3.jpg (56.1 Кб, 123 просмотров)
from dark to light)

Последний раз редактировалось Stilet; 11.06.2015 в 10:54.
Алексей_2012 вне форума Ответить с цитированием
Старый 10.06.2015, 23:19   #22
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Со вторым рядом вообще все плохо
Код:
#include <QCoreApplication>
#include <math.h>


float chislitel(int i)
{

    float a1=0;
   return a1+chislitel(i+10);

}

float recurs(int x)
{
    float a=chislitel(0)/x;
printf("%f\n",a);
    if (a < 0.0000001) return 0;
    else
        return a+recurs(x+4);


}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
int x1=2,j1=2;
    printf("Vvedite chislo X: ");
    scanf("%d",&x1);

    printf("Summ: %f",recurs(x1));


    return a.exec();
}
А вот со вторым рядом из 21-го поста что-то непонятное, при определенных параметрах Х все как надо работает, а при других происходит переполнение

Код:
#include <QCoreApplication>
#include <math.h>

int count=1;
int znam=0;
bool chislo=false;

float recurs(int x)
{
    znam++;



    float a=pow(((2*x)-3),znam)/count;
     count=count+2;

     printf("%f\n",a);


      if (a < 0.01) return 0;
      else
          if (!chislo)
          {
          return a+recurs(x);
          chislo=true;
          }
      else
          {
          return -a+recurs(x);
          chislo=false;
          }


}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);


printf("\nSumm:%f",recurs(2));



    return a.exec();
}
from dark to light)

Последний раз редактировалось Stilet; 11.06.2015 в 10:56.
Алексей_2012 вне форума Ответить с цитированием
Старый 11.06.2015, 11:49   #23
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

19 пост - мне не нравится, что используется глобальная переменная.
Код:
#include <QCoreApplication>
#include <math.h>

float f(float m, int x0)
{
    m *= x0;
    float a = 1.0 / (1 + m);
    if (a < 0.00001)
        return 0;
    else
        return a + f(m, x0);
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    int x;
    printf("Vvedite chislo X: ");
    scanf("%d", &x);
    printf("%f", f(1, x * x));
    return a.exec();
}
21 пост "Пробовал так, циклится" - ну так в вызове recurs(x, j) опять вызывается recurs(x, j), т.е. те же параметры численные.
22 пост "Со вторым рядом вообще все плохо" - вообще не понял, что там вычисляется.
Код:
#include <QCoreApplication>
#include <math.h>

float f(int c, int z)
{
    float a = 1.0 * c / (z * z);
    if (a < 0.00001)
        return 0;
    else
        return a + f(c + 10, z + 2);
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    printf("%f", f(11, 2));
    return a.exec();
}
Но ряд является расходящимся по мнению ВольфрамАльфа, так что не могу сказать, насколько точно посчитается
22 пост "А вот со вторым рядом из 21-го поста что-то непонятное, при определенных параметрах Х все как надо работает, а при других происходит переполнение" - значение элемента ряда при определенных Х явно не уменьшается, поэтому не происходит выхода из рекурсии.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 11.06.2015 в 12:35.
BDA вне форума Ответить с цитированием
Старый 11.06.2015, 12:53   #24
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
Не подумайте что стеб, но сколько раз эта функция вызовет сама себя? Ничего в рекурсии непонятно
Рекурсия, не такая сложная, как кажется с первого взгляда. Боятся её потому, что при неверно введённых данных переполняется стек (обращение к функциям, идёт именно через него.).

Достаточно, создать правильные условия выхода из функции и всё будет тип-топ.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 19.06.2015, 11:09   #25
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Ребят, а как для этого ряда вычислить? Вернее: возможно ли записать код еще более упрощенно?

Код:
#include <QCoreApplication>
#include <math.h>


float recursion(int i,int j)
{
    float a=1/(i*sqrt(j));
    if (a<0.00001) return 0;
    else
        return a+recursion(i+1,j+1);
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    int i,j;
    printf("Input nachalnie znacheniya: obr [i,j]\n");
    scanf("%d,%d",&i,&j);
    printf("%f",recursion(i,j));

    return a.exec();
}
Изображения
Тип файла: jpg IMAG0261.jpg (84.8 Кб, 127 просмотров)
from dark to light)

Последний раз редактировалось Алексей_2012; 19.06.2015 в 11:19.
Алексей_2012 вне форума Ответить с цитированием
Старый 19.06.2015, 12:00   #26
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Как обойтись без задания точности?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 19.06.2015, 14:14   #27
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Насколько я понял задание, нужно получить сумму первых n элементов ряда:
Код:
#include <QCoreApplication>
#include <math.h>

float recursion(int i)
{
    if (i == 0) return 0;
    return (1.0 / (i * sqrt(i + 1)) + recursion(i - 1);
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    int n;
    printf("Input count:\n");
    scanf("%d", &n);
    printf("%f", recursion(n));

    return a.exec();
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 19.06.2015 в 21:58.
BDA вне форума Ответить с цитированием
Старый 19.06.2015, 20:22   #28
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Спасибо, сделал практически так же, но вот в чем загвостка, для проверки решил вывести результат выполнения функции до вызова самой себя на этапе Н+1.

Вывел все, и inf, видимо функция залезла за грань и извлекла корень из отрицательного значения.

Код:
#include <QCoreApplication>
#include <math.h>

float recursion(int N)
{ float a=1/(N*sqrt(N+1));

    printf("\n%f",a);

    if (N <=0) return 0;
    else
        return   a  + recursion(N - 1);
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    int n;
    printf("Input count:\n");
    scanf("%d", &n);
    printf("\n Rezult: %f", recursion(n));

    return a.exec();
}
Изображения
Тип файла: jpg htrehcbz.jpg (40.9 Кб, 60 просмотров)
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 19.06.2015, 21:23   #29
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

При N = 0 значение тоже печатается, а там получается 1 / 0.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 19.06.2015, 21:51   #30
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

А как это исправить в коде из поста №28?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
рекурсия Ника-Вероника Паскаль, Turbo Pascal, PascalABC.NET 6 23.03.2012 21:43
Рекурсия unbanned Паскаль, Turbo Pascal, PascalABC.NET 7 19.01.2012 11:25
Рекурсия dusya9992 Паскаль, Turbo Pascal, PascalABC.NET 4 29.08.2010 14:14
Рекурсия Solnze2 Паскаль, Turbo Pascal, PascalABC.NET 0 09.06.2010 09:28
Рекурсия Shadows_Behind Помощь студентам 6 26.05.2010 15:07