Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сумма ряда, вычисление суммы ряда 
:(
    Опции темы
Aleksandra24
  Дата 15.4.2013, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 13.2.2013

Репутация: нет
Всего: нет



Ребята помогите  пожалуйста разобраться с программкой я студент первого курса учусь программировать на С++ можете пожалуйста помочь мне никак не понимаю что мне надо сделать..!!!
Нужно вычислить сумму ряда с помощью рекурсии n x y должны вводиться с клавиатуры..
Никак не могу разобраться как правильно работать с рекурсией...помогите пожалуйста!!!Буду очень благодарен!!!


Присоединённый файл ( Кол-во скачиваний: 13 )
Присоединённый файл  summ.JPG 4,03 Kb
PM MAIL   Вверх
Crafty
Дата 15.4.2013, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 3.11.2008

Репутация: 12
Всего: 14



Код

#include <iostream>
#include <cmath>

unsigned fact(unsigned i)
{
   if (i == 0)
      return 1;
   return i * fact(i-1);
}

double rec(double x, double y, int n)
{
   if (n == 1)
      return (x + y*y)/1;
   return (pow(x,n) + pow(y, n+1))/fact(n) + rec(x, y, n-1);
}

int main()
{
   std::cout << rec(2.1, 2, 2) << std::endl;
   return 0;
}

PM MAIL   Вверх
feodorv
Дата 15.4.2013, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(Crafty @  15.4.2013,  16:07 Найти цитируемый пост)
unsigned fact(unsigned i)

Целочисленной переменной надолго не хватит, быстро настанет переполнение))) Да и не продуктивно это факториал каждый раз считать, хотя код в этом случае и более наглядный...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Crafty
Дата 15.4.2013, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 3.11.2008

Репутация: 12
Всего: 14



Пусть long long будет.

Добавлено через 10 минут и 44 секунды
double наверное лучше будет
PM MAIL   Вверх
Aleksandra24
Дата 15.4.2013, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 13.2.2013

Репутация: нет
Всего: нет



Спасибо большое ребята!!!!Выручили меня)))
можете пожалуйста еще обьяснить как правильно работает рекурсия никак не понимаю...(((
PM MAIL   Вверх
feodorv
Дата 16.4.2013, 05:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(Aleksandra24 @  15.4.2013,  19:37 Найти цитируемый пост)
можете пожалуйста еще обьяснить как правильно работает рекурсия никак не понимаю...((( 

Может, тогда цикл (вместо рекурсии)?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
Crafty
Дата 16.4.2013, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 3.11.2008

Репутация: 12
Всего: 14



feodorv, 
Цитата(Aleksandra24 @  15.4.2013,  13:41 Найти цитируемый пост)
Нужно вычислить сумму ряда с помощью рекурсии n x y должны вводиться с клавиатуры..


PM MAIL   Вверх
feodorv
Дата 16.4.2013, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Оу, тогда Александре придётся разбираться)))


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
math64
Дата 16.4.2013, 08:33 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 12
Всего: 72



Пример не показателен - рекурсия здесь не нужна. Её можно заменить циклом.
Чтобы избежать повторных вычислений, придётся добавлять доп. аргументы в функцию:
Код

double recursion(double x, double y, int n, double& fact, double& powx, double& powy)
{
   if (n == 1) {
      fact = 1;
      powx = x;
      powy = y*y;
      return powx + powy;
   }
   double rec = recursion(x, y, n-1, fact, powx, powy);
   fact *= n;
   powx *= x;
   powy *= y;
   return rec + (powx + powy)/fact;
}
double series(double x, double y, int n) {
   double fact, powx, powy;
   return recursion(x, y, n, fact, powx, powy);
}

А с циклом всё проще:
Код

double series(double x, double y, int n) {
   double fact = 1, powx = x, powy = y*y, rec = powx + powy;
   for(int i = 2; i <= n; i++) {
      fact *= i;
      powx *= x;
      powy *= y;
      rec += (powx + powy)/fact;
   }
   return rec;
}

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0491 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.