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

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

Войти
Регистрация
Восстановить пароль
 
 
Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
#1

Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х) - C++

10.07.2013, 18:57. Просмотров 1014. Ответов 20
Метки нет (Все метки)

Вводим число х. Функция должна вызывать сама себя до тех пор пока sum не станет больше х. Но программа выдает ошибку, Подскажите в чем проблема пожалуйста? Заранее спасибо.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
int fn_sum(int  x)
{
    int n,sum=1,i=n;
    while(sum<x)
    {
        sum=sum+i;
        i++;
        n=i;
        fn_sum(x);
 
    }
        return sum;
}
int main()
{
  int x;
  cin>>x;
  cout<<fn_sum(x);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2013, 18:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х) (C++):

Считать Z до тех пор пока выражение под знаком логарифма больше 0.05 - C++
помогите решить и составить блок схему

Считать S до тех пор, пока выражение под знаком логарифма больше 1. Определить k - количество вычисленных S - C++
Дано: а=2; dа=-0.5. S вычислять по формуле: S=2,79*ln(a^3-a-1) . Считать S до тех пор, пока выражение под знаком логарифма больше 1....

Просматривать массив до тех пор, пока не встретится 0 - C++
Дан массив случайных чисел. Просматривать массив до тех пор, пока не встретится 0, и все четные числа записывать во второй массив. Если в...

Запрашивать пароль до тех пор, пока он не будет правильно введен - C++
Составить программу, которая запрашивает пароль (например, четырехзначное число) до тех пор, пока он не будет правильно введен.

Cчитывать строку в консоли до тех пор пока не встретится точка. - C++
Нужно считывать строку в консоли до тех пор пока не встретится точка.

Вводить числа в диалоге с пользователем (до тех пор, пока он не откажется от ввода) - C++
Используя в программе цикл while, Вводить числа в диалоге с пользователем (до тех пор, пока он не откажется от ввода). Вывести общее...

20
Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
13.07.2013, 15:27  [ТС] #16
Цитата Сообщение от soican Посмотреть сообщение
сумму чего ты хочешь вычислять? тот код который тебе написали будут возвращать x(если x четное) или х+1 (если x нечетное)
Я именил sum +=2; на sum ++; и все ок. Все отлично считается. Меня не интересовала сумма, меня интересовала организация рекурсиии и в чем заключалась моя ошибка.
0
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
13.07.2013, 15:53 #17
Цитата Сообщение от Nikko12 Посмотреть сообщение
меня интересовала организация рекурсиии и в чем заключалась моя ошибка.
самый простой пример рекурсии - нахождение факториала:
C++
1
2
3
4
5
6
7
8
int Factorial(int n)
        {
            if (n == 0 || n == 1)
            {
                return 1;
            }
            else return n * Factorial(n - 1);
        }
0
Thinker
Эксперт С++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
13.07.2013, 17:45 #18
Цитата Сообщение от Nikko12 Посмотреть сообщение
Я именил sum +=2; на sum ++; и все ок. Все отлично считается. Меня не интересовала сумма, меня интересовала организация рекурсиии и в чем заключалась моя ошибка.
ну вы шутник, в том примере и не было никакой рекурсии
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.07.2013, 07:50 #19
Так уж и не было? Вызов функции самой себя есть. Другое дело, что к подсчёту sum рекурсия не имеет отношения.

Нахождение суммы арифметической прогрессии от 1, 2, 3, ... 10:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cstdlib>
using namespace std;
 
int fn_sum(int sum)
{   
    cout << sum << endl;
    if (sum > 9) return sum;
    sum = sum + fn_sum(sum + 1);
    cout << sum << endl; 
    return sum;
}
 
int main()
{
    int sum = 1;
    cout << endl << fn_sum(sum) << endl;
    
    system("pause");
    return 0;
}
0
Thinker
Эксперт С++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
14.07.2013, 13:14 #20
Цитата Сообщение от alsav22 Посмотреть сообщение
Так уж и не было?
речь о посте #14, ибо ТС про него писал.
0
alsav22
15.07.2013, 03:34     Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х)
  #21

Не по теме:

Цитата Сообщение от Thinker Посмотреть сообщение
речь о посте #14, ибо ТС про него писал.
Да нет, там просто не сразу понять о чём разговор. В 14 посте, soican, пишет о коде, который был дан ТС раньше:
Цитата Сообщение от soican Посмотреть сообщение
тот код который тебе написали будет возвращать x(если x четное) или х+1 (если x нечетное)
и предлагает свой, без рекурсии:
Цитата Сообщение от soican Посмотреть сообщение
его вообще можно сделать таким
ТС, в ответе (который вы цитируете), пишет о ранее предложенном коде (10 пост), который его устраивает. Именно там он заменил sum +=2 на sum ++),

1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2013, 03:34
Привет! Вот еще темы с ответами:

Выполнение цикла до тех пор, пока не будет нажата определенная клавиша - C++
Доброе время суток, люди добрые! Начал заниматься С++ не так давно, поэтому всех хтростей не знаю, в следствие чего прошу о помощи....

Ввод произвольных символов до тех пор, пока не будет введен символ q - C++
Написать программу ввода произвольных символов до тех пор, пока не будет введен символ q.

Выводить на экран вводимые символы до тех пор, пока не введен символ <*> - C++
Напишите программу, которая будет выводить на экран вводимые символы до тех пор, пока не введен символ &lt;*&gt;. Доработайте программу таким...

Пользователь вводит с клавиатуры числа, до тех пор пока не введено число 6 - C++
Пользователь вводит с клавиатуры числа, до тех пор пока не введено число 6. Найти сумму чисел до6. ЗЫ - не набросков не чего...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.07.2013, 03:34
Ответ Создать тему
Опции темы

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