4 / 3 / 0
Регистрация: 26.10.2009
Сообщений: 43
1

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

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

Author24 — интернет-сервис помощи студентам
Уважаемые программисты!!! помогите разобраться, дали задачу. Найти 1+2+3+...+n.
Первый способ, решить рекурсивно, а второй не рекурсивно. Чем текст программ будет различаться???
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.08.2010, 22:29
Ответы с готовыми решениями:

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

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

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

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

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

Добавлено через 56 секунд
а то на экзамене я ее написала, и по ней надо отчитываться!!!!((((
0
25 / 25 / 3
Регистрация: 06.03.2010
Сообщений: 59
30.08.2010, 23:26 22
s = 0 сделать
1
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
30.08.2010, 23:27 23
NightmareZ, интуитивно понятный код,но почему используется Sum<>::value? то есть почему там значёк разрешения видимости? получается,там какой-то безымянный и бестипный value(ну это ещё понятно-вроде как член enum-а) в безымянном enum-е? или это какая-то стандартная часть нового стандарта и value это некое стандартное имя чего-то?
1
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
30.08.2010, 23:31 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;
}
1
4 / 3 / 0
Регистрация: 26.10.2009
Сообщений: 43
30.08.2010, 23:34  [ТС] 25
а как ее сделать не рекурсивной???

последний вопрос!!! больше не буду приставать!!!
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
30.08.2010, 23:40 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;
}
1
4 / 3 / 0
Регистрация: 26.10.2009
Сообщений: 43
30.08.2010, 23:41  [ТС] 27
Огромное спасибо за помощь!!!!
0
Заблокирован
30.08.2010, 23:43 28
Цитата Сообщение от #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 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
2
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
30.08.2010, 23:56 30
bobromet, Гм. Да. ОписАлся
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,748
31.08.2010, 00:09 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;
}
2
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
31.08.2010, 00:16 32
easybudda, Неслабо) Хорошее разнообразие
1
Заблокирован
31.08.2010, 00:18 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;
}

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

Интересно, какую сущность описывает этот класс?
1
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
31.08.2010, 00:23 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;
}
0
4 / 3 / 0
Регистрация: 26.10.2009
Сообщений: 43
31.08.2010, 00:23  [ТС] 35
да... вот это программа!!!!!! ужас!!!! такая замудренная!!!!
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
31.08.2010, 00:29 36
Юлек, Ну ничего особо замудренного там нет. Просто через ООП) Класс, да перегрузка оператора вывода в поток.
0
25 / 25 / 3
Регистрация: 06.03.2010
Сообщений: 59
31.08.2010, 00:33 37
очень понравился этот момент, не знал что так можно, спасиб!
C++
1
for ( nResult = 0; start; nResult += start-- );
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12454 / 7479 / 1752
Регистрация: 25.07.2009
Сообщений: 13,748
31.08.2010, 00:36 38
Цитата Сообщение от NightmareZ Посмотреть сообщение
Спасибо, что вынесли мне мозг перед сном.
Обращайтесь.
Цитата Сообщение от NightmareZ Посмотреть сообщение
Я обязательно положу этот пример в коллекцию "как делать не нужно".
Не будьте голословным, объясните, почему именно так делать не нужно.
Цитата Сообщение от NightmareZ Посмотреть сообщение
Интересно, какую сущность описывает этот класс?
Никакой сущности он не описывает, просто решает поставленную задачу. Про функторы почитайте...
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
31.08.2010, 00:49 39
easybudda, Почему не

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

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

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

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

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

Вобщем, я считаю, что тут лютый оверхед.
0
31.08.2010, 00:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.08.2010, 00:57
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru