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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.75
Юлек
4 / 3 / 0
Регистрация: 26.10.2009
Сообщений: 43
#1

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

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

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

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

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

Найти рекурсивно сумму ряда - C++
e^(-x^2) = сумма, где k от 0 до бесконечности (-1)^k * (x^2*k)/k! x от 1 до 15 Пользуйтесь редактором формул внизу страницы ...

Найти минимальный элемент массива рекурсивно - C++
Всем привет!!! Нужно найти минимальный элемент массива при помощи рекурсии. Просидел вчера весь день и никак не могу воткнуть как...

Найти рекурсивно значение функции Аккермана A(m, n) - C++
Я новичек так что сильно не бейте :) Нужно рекурсивно найти функцию Аккермана. double Akerrman(int m,int n) { if (m = 0) return...

Рекурсивно найти число входящих элементов Е в дерево Т - C++
Почему-то не работает, помогите! :C struct gruz_p // Описание записи о грузополучателе { char nomer, fio, dr, pol, ...

Рекурсивно найти сумму нечетных элементов до заданного n - C++
Добрый вечер! Необходимо рекурсивно найти сумму нечетных элементов до заданного n, даже не знаю с чего начать!...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Юлек
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
Временно недоступен
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
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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
1339 / 562 / 37
Регистрация: 31.03.2009
Сообщений: 1,918
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
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
30.08.2010, 23:56     Найти 1+2+3+...+n рекурсивно и итеративно #30
bobromet, Гм. Да. ОписАлся
easybudda
Эксперт С++
9460 / 5473 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
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
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
31.08.2010, 00:16     Найти 1+2+3+...+n рекурсивно и итеративно #32
easybudda, Неслабо) Хорошее разнообразие
NightmareZ
1339 / 562 / 37
Регистрация: 31.03.2009
Сообщений: 1,918
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
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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
Эксперт С++
9460 / 5473 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
31.08.2010, 00:36     Найти 1+2+3+...+n рекурсивно и итеративно #38
Цитата Сообщение от NightmareZ Посмотреть сообщение
Спасибо, что вынесли мне мозг перед сном.
Обращайтесь.
Цитата Сообщение от NightmareZ Посмотреть сообщение
Я обязательно положу этот пример в коллекцию "как делать не нужно".
Не будьте голословным, объясните, почему именно так делать не нужно.
Цитата Сообщение от NightmareZ Посмотреть сообщение
Интересно, какую сущность описывает этот класс?
Никакой сущности он не описывает, просто решает поставленную задачу. Про функторы почитайте...
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 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 рекурсивно и итеративно
Еще ссылки по теме:

Рекурсивно найти n-ую производную для заданого x. Результат похож на шестнадцатеричный код - C++
Задание:рекурсивно найти n-ую производную f(x)={e}^{(a{x}^{2}+bx+c)} для заданого x,построив для {f}^{(n)}(x) рекурентное соотношение. ...

Рекурсивно обчислити добуток n ≥ 2 співмножників (n парне): у = (2/1)*(2/3)*(4/3)*(4/5)*(6/5)*(6/7).Рекурсивно обчислити добуток n ≥ 2 співмножників - C++
Рекурсивно обчислити добуток n ≥ 2 співмножників (n парне): у = (2/1)*(2/3)*(4/3)*(4/5)*(6/5)*(6/7)...

Вычислить y=x^N рекурсивно - C++
Вычислить y=x^N по следующему алгоритму: y=(x^(N/2))^2 , если N четное; y=x*x^(N-1) , если N нечетное. C ПОМОЩЬЮ РЕКУРСИИ. В чем ошибка? ...

Вычислить сумму рекурсивно - C++

Числа Фибоначчи рекурсивно - C++
Написать рекурсивную функцию, высчитывает N-й элемент последовательности чисел Фибоначчи FK, которая описывается следующими формулами: F1 =...


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

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

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

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

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

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

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

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