Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
 Аватар для Юлек
4 / 3 / 0
Регистрация: 26.10.2009
Сообщений: 43

Найти 1+2+3+...+n рекурсивно и итеративно

30.08.2010, 22:29. Показов 7011. Ответов 54
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые программисты!!! помогите разобраться, дали задачу. Найти 1+2+3+...+n.
Первый способ, решить рекурсивно, а второй не рекурсивно. Чем текст программ будет различаться???
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.08.2010, 22:29
Ответы с готовыми решениями:

Вычислить выражение рекурсивно и итеративно
Помогите записать пример. Решить задачу на фото двумя способами - с применением рекурсии и без неё. ...

Вычисление цепной дроби (рекурсивно и итеративно)
Как это вообще сделать ??? Нужно с помощь. рекурсии и без неё С++.

Как рекурсивно и итеративно вычислить сумму ряда?
Ребят, помогите пожалуйста, ибо рекурсию вообще не шарю(( Есть ряд, как его считать?

54
 Аватар для Юлек
4 / 3 / 0
Регистрация: 26.10.2009
Сообщений: 43
30.08.2010, 23:17  [ТС]
Студворк — интернет-сервис помощи студентам
что в моей ужасной программе надо изменить чтобы она работала???

Добавлено через 56 секунд
а то на экзамене я ее написала, и по ней надо отчитываться!!!!((((
0
25 / 25 / 3
Регистрация: 06.03.2010
Сообщений: 59
30.08.2010, 23:26
s = 0 сделать
1
Временно недоступен
 Аватар для #pragma
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
30.08.2010, 23:27
NightmareZ, интуитивно понятный код,но почему используется Sum<>::value? то есть почему там значёк разрешения видимости? получается,там какой-то безымянный и бестипный value(ну это ещё понятно-вроде как член enum-а) в безымянном enum-е? или это какая-то стандартная часть нового стандарта и value это некое стандартное имя чего-то?
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
30.08.2010, 23:31
Юлек, Отрицательные числа вводить не рекомендуется

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int main()
{
   int n=0, s=0, i=0;
   printf("Enter n: ");
   scanf("%d", &n);
   for(i=0; i<=n; ++i)
   {
      s+=i;
   }
   printf("\n");
   printf("%d", s);
   return 0;
}
Ну и рекурсию в догонку.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
int Sum(int n)
{
   if(n==0) 
      return 0;
  else if(n==1)
      return 1;
  else
     return n+Sum(n-1);
}
 
int main()
{
   int n, res=0;
   printf("Enter n: ");
   scanf("%d", &n);
   res=Sum(n);
   printf("\n");
   printf("%d", res);
   return 0;
}
1
 Аватар для Юлек
4 / 3 / 0
Регистрация: 26.10.2009
Сообщений: 43
30.08.2010, 23:34  [ТС]
а как ее сделать не рекурсивной???

последний вопрос!!! больше не буду приставать!!!
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
30.08.2010, 23:40
Юлек, А смысл рекурсивную функцию делать не рекурсивной? оО

Ну как-то так:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
int Sum(int n)
{
   int i, int s=0;
   for(i=0; i<n; ++i)
   {
      s+=i;
   }
   return s;
}
 
int main()
{
   int n, res=0;
   printf("Enter n: ");
   scanf("%d", &n);
   res=Sum(n);
   printf("\n");
   printf("%d", res);
   return 0;
}
1
 Аватар для Юлек
4 / 3 / 0
Регистрация: 26.10.2009
Сообщений: 43
30.08.2010, 23:41  [ТС]
Огромное спасибо за помощь!!!!
0
Заблокирован
30.08.2010, 23:43
Цитата Сообщение от #pragma Посмотреть сообщение
интуитивно понятный код,но почему используется Sum<>::value? то есть почему там значёк разрешения видимости?
Ну какбэ потому что value объявлен в Sum

Цитата Сообщение от #pragma Посмотреть сообщение
получается,там какой-то безымянный и бестипный value(ну это ещё понятно-вроде как член enum-а) в безымянном enum-е?
Ну потому что просто так объявить в структуре поле можно, но нельзя ему задать значение. А в enum можно задать значение для это поля при конкретном N.

Цитата Сообщение от #pragma Посмотреть сообщение
или это какая-то стандартная часть нового стандарта и value это некое стандартное имя чего-то?
Нет. Вместо value можешь задать любое допустимое для идентификатора имя.
1
25 / 25 / 3
Регистрация: 06.03.2010
Сообщений: 59
30.08.2010, 23:53
Цитата Сообщение от Lavroff Посмотреть сообщение

Ну как-то так:

C
1
2
3
4
5
6
7
8
9
int Sum(int n)
{
   int i, int s=0;
   for(i=0; i<n; ++i)
   {
      s+=i;
   }
   return s;
}
в цикле нужно сделать i<=n а не i<n , а то при n = 5 получится 10
2
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
30.08.2010, 23:56
bobromet, Гм. Да. ОписАлся
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12848 / 7597 / 1766
Регистрация: 25.07.2009
Сообщений: 13,985
31.08.2010, 00:09
для разнообразия
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
 
class Sum {
    unsigned int nResult;
public:
    Sum() : nResult(0) {}
    Sum(unsigned int start){
        for ( nResult = 0; start; nResult += start-- )
            ;
    }
    friend std::ostream & operator << (std::ostream & ost, const Sum & sum){
        ost << sum.nResult;
        return ost;
    }
};
 
int main(){
    int val;
    
    std::cout << "Enter some positive numbers (negative - exit)" << std::endl;
    
    while ( true ){
        std::cout << "> ";
        std::cin >> val;
        if ( val < 0 )
            break;
        std::cout << "  " << Sum(val) << std::endl;
    }
    
    return 0;
}
2
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
31.08.2010, 00:16
easybudda, Неслабо) Хорошее разнообразие
1
Заблокирован
31.08.2010, 00:18
Цитата Сообщение от easybudda Посмотреть сообщение
для разнообразия
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
 
class Sum {
    unsigned int nResult;
public:
    Sum() : nResult(0) {}
    Sum(unsigned int start){
        for ( nResult = 0; start; nResult += start-- )
            ;
    }
    friend std::ostream & operator << (std::ostream & ost, const Sum & sum){
        ost << sum.nResult;
        return ost;
    }
};
 
int main(){
    int val;
    
    std::cout << "Enter some positive numbers (negative - exit)" << std::endl;
    
    while ( true ){
        std::cout << "> ";
        std::cin >> val;
        if ( val < 0 )
            break;
        std::cout << "  " << Sum(val) << std::endl;
    }
    
    return 0;
}

Спасибо, что вынесли мне мозг перед сном. Я обязательно положу этот пример в коллекцию "как делать не нужно".

Интересно, какую сущность описывает этот класс?
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
31.08.2010, 00:23
NightmareZ, Примерно такую же какой и этот:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <string>
 
class Hello
{
   std::string f;
public:
    Hello():f("Hello, world!"){}
    ~Hello(){}
    friend std::ostream& operator <<(std::ostream& os, const Hello &Ob);
};
 
std::ostream& operator <<(std::ostream& os, const Hello& Ob)
{
   os<<Ob.f<<'\n';
   return os;
}
 
int main()
{
    Hello Str;
    std::cout<<Str;
    return 0;
}
0
 Аватар для Юлек
4 / 3 / 0
Регистрация: 26.10.2009
Сообщений: 43
31.08.2010, 00:23  [ТС]
да... вот это программа!!!!!! ужас!!!! такая замудренная!!!!
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
31.08.2010, 00:29
Юлек, Ну ничего особо замудренного там нет. Просто через ООП) Класс, да перегрузка оператора вывода в поток.
0
25 / 25 / 3
Регистрация: 06.03.2010
Сообщений: 59
31.08.2010, 00:33
очень понравился этот момент, не знал что так можно, спасиб!
C++
1
for ( nResult = 0; start; nResult += start-- );
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12848 / 7597 / 1766
Регистрация: 25.07.2009
Сообщений: 13,985
31.08.2010, 00:36
Цитата Сообщение от NightmareZ Посмотреть сообщение
Спасибо, что вынесли мне мозг перед сном.
Обращайтесь.
Цитата Сообщение от NightmareZ Посмотреть сообщение
Я обязательно положу этот пример в коллекцию "как делать не нужно".
Не будьте голословным, объясните, почему именно так делать не нужно.
Цитата Сообщение от NightmareZ Посмотреть сообщение
Интересно, какую сущность описывает этот класс?
Никакой сущности он не описывает, просто решает поставленную задачу. Про функторы почитайте...
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
31.08.2010, 00:49
easybudda, Почему не

C++
1
2
3
4
5
void operator()(unsigned int start)
{
   for ( nResult = 0; start; nResult += start-- )
      ;
}
Собственно понял почему здесь он не будет нормально работать.
0
Заблокирован
31.08.2010, 00:57
Цитата Сообщение от easybudda Посмотреть сообщение
Не будьте голословным, объясните, почему именно так делать не нужно.
Ну, во-первых, потому что бессмысленно громоздить лишние конструкции ради того, что решается проще, быстрее и удобнее простой функцией.

А, во-вторых,
Цитата Сообщение от easybudda Посмотреть сообщение
Никакой сущности он не описывает, просто решает поставленную задачу. Про функторы почитайте...
Класс таки должен быть схемой, моделью некоторых сущностей. А, если он таковым не является, это наводит на подозрение, что есть просто для того, чтобы был.

Да знаю я что такое функторы. Но тут функции выше крыши хватает.

К тому же, что это за функтор такой, который после инстанцирования всегда возвращает одно и то же значение? На эту роль константа подходит.

Да и для функторов в C++ принято перегружать оператор ()... но это уже придирка

Вобщем, я считаю, что тут лютый оверхед.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.08.2010, 00:57

Вычислить произведение рекурсивно/итеративно, оценить время выполнения
Нужно разработать программу с использованием рекурсивной функции и без использования рекурсивной функции. Оценит время выполнения. x=...

Вычислить выражение рекурсивно и итеративно
Решить задачу двумя способами - с рекурсией и без: y(n)=\sqrt{1+\sqrt{2+...+\sqrt{n}}}

Вычисление суммы рекурсивно и итеративно
Помогите сделать программу. В понедельник сдавать, а мне еще 9 программ писать. Все мельком глянул, вот только эту не знаю как сделать. ...

Вычислить сумму ряда рекурсивно и итеративно
1.напишите рекурсивную функцию которая подсчитает сумму: 1/(2*3)+2/(3*4)+...+n/(n+1)*(n+2) 2. имея рекурсивную подпрограмму составить...

Вычисление значения цепной дроби (рекурсивно и итеративно)
Описать рекурсивную и нерекурсивную функции вычисления значения цепной дроби: \huge...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
BitTorrent (версия 7.11 English) и Меню Настройки
russiannick 15.11.2026
Пункты, отвечающие за отключение обновлений в BitTorrent версии 7. 11 (английской) Options Preferences General Language
Транслитерация текста с кириллицы на латиницу (вариант №4)
Maks 15.11.2026
Что-то я перемудрил с предыдущими версиями, в этот раз сделал всё проще, обратившись к функции "СтрокаЛатиницей" из типового общего модуля "СтроковыеФункцииКлиент". В данной функции нет апострофов,. . .
BitTorrent (версия 4.3.9) и Меню Настройки
russiannick 15.11.2026
В меню Настройки можно отключить автоматическое обновление программы. Карта этого меню приложена ниже. Нужный пункт выделен красным. Сервис Настройки Поведение
Транслитерация текста с кириллицы на латиницу (вариант №3)
Maks 15.11.2026
Обновленная версия предыдущей обработки. Изменения коснулись букв: Ъ, Ы, Ь, Э, отображения которых зависят от положения реквизита "Транслитерация имён". Изменено отображение буквы Й. Добавлена. . .
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru