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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реализовать cумму чисел в диапазоне от 10 до 25 че 
:(
    Опции темы
sswt
Дата 12.10.2015, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Реализовать cумму чисел в диапазоне от 10 до 25 через рекурсию. Где я ошибку делаю?
Код

int ForFuncSum(int from, int to)
{
    if (from == to)
        return from;
    else
        to + ForFuncSum(from + 1, to);
}
int main()
{
    printf("%d\n",ForFuncSum(10, 25));
    return 0;
}


PM MAIL   Вверх
Guinness
Дата 12.10.2015, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вы 16 раз просуммировали максимальное значение последовательности (25).

Добавлено @ 13:31
Собственно, тут два варианта:
Код

int ForFuncSum(int from, int to)
{
    if (from == to)
        return from;
    else
        return to + ForFuncSum(from, to - 1);
}

либо
Код

int ForFuncSum(int from, int to)
{
    if (from == to)
        return to;
    else
        return from + ForFuncSum(from + 1, to);
}


Это сообщение отредактировал(а) Guinness - 12.10.2015, 13:31
PM MAIL   Вверх
a0730
Дата 12.10.2015, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вторая часть if не возвращает значение.
Код

#include <stdio.h>
int ForFuncSum(int from, int to)
{
    return (from == to)?from:from + ForFuncSum(from + 1, to);
}
int main()
{
    printf("%d\n",ForFuncSum(10, 25));
    return 0;
}



Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
math64
Дата 12.10.2015, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ну или так:
Код

int ForFuncSum(int from, int to)
{
    if (from == to)
        return from;
    if (from > to) {
        printf ("from=%d должен быть меньше или равен to=%d\n");
        return 0;
    }
    int mid = (from + to) /  2;
    return ForFuncSum(from, mid) + ForFuncSum(mid + 1, to);
}

В вариантах Guinness рекурсию можно заменить  на цикл, т.о. использование рекурсии не оправдано.
Но если считать сумму float, а не int, результат будет зависеть от порядка суммирования и вариант с делением диапазона пополам может выдать более точный результат.
PM   Вверх
Guinness
Дата 13.10.2015, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(math64 @  12.10.2015,  16:58 Найти цитируемый пост)
В вариантах Guinness рекурсию можно заменить  на цикл, т.о. использование рекурсии не оправдано.

Согласен. Но похоже человек проходит использование рекурсивного вызова функций. В своё время в институте нас заставляли вычисление факториала реализовывать через рекурсию, хотя вменяемый человек так делать в реальной жизни не будет.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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