Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.75
Юлек
 Аватар для Юлек
4 / 3 / 0
Регистрация: 26.10.2009
Сообщений: 43
30.08.2010, 22:29     Найти 1+2+3+...+n рекурсивно и итеративно #1
Уважаемые программисты!!! помогите разобраться, дали задачу. Найти 1+2+3+...+n.
Первый способ, решить рекурсивно, а второй не рекурсивно. Чем текст программ будет различаться???
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.08.2010, 22:29     Найти 1+2+3+...+n рекурсивно и итеративно
Посмотрите здесь:

Рекурсивно найти сумму нечетных элементов до заданного n C++
C++ Сумма произведений рекурсивно
Найти рекурсивно значение функции Аккермана A(m, n) C++
Найти минимальный элемент массива рекурсивно C++
C++ Вычислить рекурсивно функцию
Рекурсивно обчислити добуток n ≥ 2 співмножників (n парне): у = (2/1)*(2/3)*(4/3)*(4/5)*(6/5)*(6/7).Рекурсивно обчислити добуток n ≥ 2 співмножників C++
Рекурсивно найти n-ую производную для заданого x. Результат похож на шестнадцатеричный код C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Юлек
 Аватар для Юлек
4 / 3 / 0
Регистрация: 26.10.2009
Сообщений: 43
30.08.2010, 23:17  [ТС]     Найти 1+2+3+...+n рекурсивно и итеративно #21
что в моей ужасной программе надо изменить чтобы она работала???

Добавлено через 56 секунд
а то на экзамене я ее написала, и по ней надо отчитываться!!!!((((
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
bobromet
24 / 24 / 1
Регистрация: 06.03.2010
Сообщений: 59
30.08.2010, 23:26     Найти 1+2+3+...+n рекурсивно и итеративно #22
s = 0 сделать
#pragma
Временно недоступен
 Аватар для #pragma
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
30.08.2010, 23:27     Найти 1+2+3+...+n рекурсивно и итеративно #23
NightmareZ, интуитивно понятный код,но почему используется Sum<>::value? то есть почему там значёк разрешения видимости? получается,там какой-то безымянный и бестипный value(ну это ещё понятно-вроде как член enum-а) в безымянном enum-е? или это какая-то стандартная часть нового стандарта и value это некое стандартное имя чего-то?
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
30.08.2010, 23:31     Найти 1+2+3+...+n рекурсивно и итеративно #24
Юлек, Отрицательные числа вводить не рекомендуется

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;
}
Юлек
 Аватар для Юлек
4 / 3 / 0
Регистрация: 26.10.2009
Сообщений: 43
30.08.2010, 23:34  [ТС]     Найти 1+2+3+...+n рекурсивно и итеративно #25
а как ее сделать не рекурсивной???

последний вопрос!!! больше не буду приставать!!!
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
30.08.2010, 23:40     Найти 1+2+3+...+n рекурсивно и итеративно #26
Юлек, А смысл рекурсивную функцию делать не рекурсивной? оО

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

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;
}
Юлек
 Аватар для Юлек
4 / 3 / 0
Регистрация: 26.10.2009
Сообщений: 43
30.08.2010, 23:41  [ТС]     Найти 1+2+3+...+n рекурсивно и итеративно #27
Огромное спасибо за помощь!!!!
NightmareZ
 Аватар для NightmareZ
1337 / 560 / 37
Регистрация: 31.03.2009
Сообщений: 1,907
30.08.2010, 23:43     Найти 1+2+3+...+n рекурсивно и итеративно #28
Цитата Сообщение от #pragma Посмотреть сообщение
интуитивно понятный код,но почему используется Sum<>::value? то есть почему там значёк разрешения видимости?
Ну какбэ потому что value объявлен в Sum

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

Цитата Сообщение от #pragma Посмотреть сообщение
или это какая-то стандартная часть нового стандарта и value это некое стандартное имя чего-то?
Нет. Вместо value можешь задать любое допустимое для идентификатора имя.
bobromet
24 / 24 / 1
Регистрация: 06.03.2010
Сообщений: 59
30.08.2010, 23:53     Найти 1+2+3+...+n рекурсивно и итеративно #29
Цитата Сообщение от 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
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
30.08.2010, 23:56     Найти 1+2+3+...+n рекурсивно и итеративно #30
bobromet, Гм. Да. ОписАлся
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9383 / 5433 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
31.08.2010, 00:09     Найти 1+2+3+...+n рекурсивно и итеративно #31
для разнообразия
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;
}
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
31.08.2010, 00:16     Найти 1+2+3+...+n рекурсивно и итеративно #32
easybudda, Неслабо) Хорошее разнообразие
NightmareZ
 Аватар для NightmareZ
1337 / 560 / 37
Регистрация: 31.03.2009
Сообщений: 1,907
31.08.2010, 00:18     Найти 1+2+3+...+n рекурсивно и итеративно #33
Цитата Сообщение от 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;
}

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

Интересно, какую сущность описывает этот класс?
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
31.08.2010, 00:23     Найти 1+2+3+...+n рекурсивно и итеративно #34
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;
}
Юлек
 Аватар для Юлек
4 / 3 / 0
Регистрация: 26.10.2009
Сообщений: 43
31.08.2010, 00:23  [ТС]     Найти 1+2+3+...+n рекурсивно и итеративно #35
да... вот это программа!!!!!! ужас!!!! такая замудренная!!!!
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
31.08.2010, 00:29     Найти 1+2+3+...+n рекурсивно и итеративно #36
Юлек, Ну ничего особо замудренного там нет. Просто через ООП) Класс, да перегрузка оператора вывода в поток.
bobromet
24 / 24 / 1
Регистрация: 06.03.2010
Сообщений: 59
31.08.2010, 00:33     Найти 1+2+3+...+n рекурсивно и итеративно #37
очень понравился этот момент, не знал что так можно, спасиб!
C++
1
for ( nResult = 0; start; nResult += start-- );
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9383 / 5433 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
31.08.2010, 00:36     Найти 1+2+3+...+n рекурсивно и итеративно #38
Цитата Сообщение от NightmareZ Посмотреть сообщение
Спасибо, что вынесли мне мозг перед сном.
Обращайтесь.
Цитата Сообщение от NightmareZ Посмотреть сообщение
Я обязательно положу этот пример в коллекцию "как делать не нужно".
Не будьте голословным, объясните, почему именно так делать не нужно.
Цитата Сообщение от NightmareZ Посмотреть сообщение
Интересно, какую сущность описывает этот класс?
Никакой сущности он не описывает, просто решает поставленную задачу. Про функторы почитайте...
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
31.08.2010, 00:49     Найти 1+2+3+...+n рекурсивно и итеративно #39
easybudda, Почему не

C++
1
2
3
4
5
void operator()(unsigned int start)
{
   for ( nResult = 0; start; nResult += start-- )
      ;
}
Собственно понял почему здесь он не будет нормально работать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2010, 00:57     Найти 1+2+3+...+n рекурсивно и итеративно
Еще ссылки по теме:

C++ Рекурсивно найти число входящих элементов Е в дерево Т
C++ Реализовать формулу рекурсивно
Вычислить выражение рекурсивно и итеративно C++
C++ Найти рекурсивно сумму ряда
C++ Вычислить произведение рекурсивно/итеративно, оценить время выполнения

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

Или воспользуйтесь поиском по форуму:
NightmareZ
 Аватар для NightmareZ
1337 / 560 / 37
Регистрация: 31.03.2009
Сообщений: 1,907
31.08.2010, 00:57     Найти 1+2+3+...+n рекурсивно и итеративно #40
Цитата Сообщение от easybudda Посмотреть сообщение
Не будьте голословным, объясните, почему именно так делать не нужно.
Ну, во-первых, потому что бессмысленно громоздить лишние конструкции ради того, что решается проще, быстрее и удобнее простой функцией.

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

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

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

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

Вобщем, я считаю, что тут лютый оверхед.
Yandex
Объявления
31.08.2010, 00:57     Найти 1+2+3+...+n рекурсивно и итеративно
Ответ Создать тему
Опции темы

Текущее время: 12:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru