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

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

Восстановить пароль Регистрация
 
 
Nikko12
 Аватар для Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
10.07.2013, 18:57     Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х) #1
Вводим число х. Функция должна вызывать сама себя до тех пор пока 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);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2013, 18:57     Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х)
Посмотрите здесь:

C++ Выполнение цикла до тех пор, пока не будет нажата определенная клавиша
C++ Запрашивать пароль до тех пор, пока он не будет правильно введен
Вводить числа в диалоге с пользователем (до тех пор, пока он не откажется от ввода) C++
Cчитывать строку в консоли до тех пор пока не встретится точка. C++
C++ Считать Z до тех пор пока выражение под знаком логарифма больше 0.05
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
10.07.2013, 19:01     Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х) #2
Каждый раз, когда ты вызываешь функцию из нее самой, ты передаешь одинаковое значение x. Поэтому, если x > 1 (x > sum), то будет бесконечная рекурсия. Каждый раз будет выполняться условие в while (sum<x), откуда будет вызываться функция.
Nikko12
 Аватар для Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
10.07.2013, 19:20  [ТС]     Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х) #3
Dani,
Цитата Сообщение от Dani Посмотреть сообщение
Каждый раз, когда ты вызываешь функцию из нее самой, ты передаешь одинаковое значение x.
А я и не хочу менять значени "х", мне нужно, что-бы менялось значение sum, а оно меняется. У меня ведь считается когда sum>x то выход. Если менять на каждой итерации "х", то, что тогда будет я не знаю....

Добавлено через 1 минуту
Dani, так и не понял, что нужно исправить, что бы программа не выдавала ошибку.
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
10.07.2013, 20:11     Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х) #4
Nikko12, ты вызвал функцию. А в цикле while, в который попадаем только 1 раз, вызывается точно такая же функция с параметром x.
C++
1
cout<<fn_sum(x);
в main() тоже что и
C++
1
fn_sum(x);
т.к. x не меняется до вызова.
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
10.07.2013, 20:34     Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х) #5
я скажи условие задачи, я что-то въехать не могу, что ты вычисляешь?
Thinker
10.07.2013, 20:57
  #6

Не по теме:

Nikko12, и что это такое, где само задание? ну почему жаждущие помощи размещают свои "каракули" и спрашивают: "а что там не так?". схема то очевидна:

1. дано то-то и то-то
2. требуется получить то-то и то-то
3. я сделал это так-то и так-то
4. у меня не получается там-то и там-то...

детский сад и детский лепет...

Nikko12
 Аватар для Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
11.07.2013, 21:23  [ТС]     Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х) #7
Thinker, Нет не какого задания, я хотел попробовать реализовать рекурсию, у меня не вышло, обратился сюда за помощью

Добавлено через 1 минуту
soican, Хотел рекурсивно вычислять сумму пока она не превысит введеное число "х".
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
11.07.2013, 21:25     Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х) #8
Цитата Сообщение от Nikko12 Посмотреть сообщение
Нет не какого задания
ну так придумайте задачу, четко сформулируйте, вас поймут, тогда можно надеяться на помощь. как здесь
Побитовые сдвиги
и итерация, и рекурсия, главное, четко задать условия игры.
Nikko12
 Аватар для Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
11.07.2013, 21:36  [ТС]     Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х) #9
Dani, У меня к Вам несколько вопросов:
1. Почему моя программа завершается с ошибкой?
2. Почему цикл while() вызывается один раз??
3.
Цитата Сообщение от Dani Посмотреть сообщение
А в цикле while, в который попадаем только 1 раз, вызывается точно такая же функция с параметром x
Так ведь она и должна передоваться только с одним параметром, с "х". Иначе как он будет знать до какого числа ему считать сумму?
4.
Цитата Сообщение от Dani Посмотреть сообщение
в main() тоже что и Код C++

fn_sum(x);
Я ведь передаю один раз параметр в функцию, функция выполнила вычисления и вернула результат, поэтому не понимаю, что тут такого страшного???

Добавлено через 41 секунду
Thinker, ВВожу число "х" и передаю его как параметр в функцию, хотел попробовать рекурсивно вычислять сумму до тех пор пока сумма не превысит введеное число "х".
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.07.2013, 02:43     Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х) #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int fn_sum(int  x, int sum)
{
    int i = 2;
    while(sum < x)
    {
        sum += 2;
        fn_sum(x, sum);
    }
    return sum;
}
 
int main()
{
    int x;
    cin >> x;
    int sum = 0;
    cout << fn_sum(x, sum);
    return 0;
}
Nikko12
 Аватар для Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
12.07.2013, 07:18  [ТС]     Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х) #11
alsav22, Спасибо за помощь, но зачем в функцию передавать два параметра??? Почему нельзя обойтись одним?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.07.2013, 14:51     Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х) #12
Цитата Сообщение от Nikko12 Посмотреть сообщение
alsav22, Спасибо за помощь, но зачем в функцию передавать два параметра??? Почему нельзя обойтись одним?
Что-то должно меняться чтобы был выход из рекурсии. Если x не меняется, значит sum должна меняться в функции. Можно передавать только x, но тогда x нужно менять в функции, чтобы при определённом значени был выход из рекурсии.
Nikko12
 Аватар для Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
12.07.2013, 18:11  [ТС]     Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х) #13
alsav22, Спасибо.
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
12.07.2013, 18:37     Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х) #14
Цитата Сообщение от Nikko12 Посмотреть сообщение
Thinker, ВВожу число "х" и передаю его как параметр в функцию, хотел попробовать рекурсивно вычислять сумму до тех пор пока сумма не превысит введеное число "х".
сумму чего ты хочешь вычислять? тот код который тебе написали будут возвращать x(если x четное) или х+1 (если x нечетное)
его вообще можно сделать таким
C++
1
2
3
4
5
int fn_sum(int  x, int sum)
{   while(sum < x)
    {     sum += 2; }
    return sum;
}
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6162 / 2891 / 282
Регистрация: 04.12.2011
Сообщений: 7,691
Записей в блоге: 3
12.07.2013, 19:13     Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х) #15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
int theUpperBorder = 10;
int theNuberToAdd  = 2;
 
int add(int a){
if(a + theNuberToAdd > theUpperBorder) return a;
if(a > theUpperBorder) return a-=theNuberToAdd;
if(a == theUpperBorder) return a;
return add(a+=theNuberToAdd);
}
int main ( )
{ 
int a=3;
//не понял к чему и что прибавить, 
//поэтому прибавляю к тому, что есть 2 (охваченный общим порывом))
cout<<add(a)<<endl;
system("pause");
  return 0;
}
Nikko12
 Аватар для Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
13.07.2013, 15:27  [ТС]     Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х) #16
Цитата Сообщение от soican Посмотреть сообщение
сумму чего ты хочешь вычислять? тот код который тебе написали будут возвращать x(если x четное) или х+1 (если x нечетное)
Я именил sum +=2; на sum ++; и все ок. Все отлично считается. Меня не интересовала сумма, меня интересовала организация рекурсиии и в чем заключалась моя ошибка.
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
13.07.2013, 15:53     Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х) #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);
        }
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
13.07.2013, 17:45     Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х) #18
Цитата Сообщение от Nikko12 Посмотреть сообщение
Я именил sum +=2; на sum ++; и все ок. Все отлично считается. Меня не интересовала сумма, меня интересовала организация рекурсиии и в чем заключалась моя ошибка.
ну вы шутник, в том примере и не было никакой рекурсии
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.07.2013, 07:50     Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х) #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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2013, 13:14     Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х)
Еще ссылки по теме:

Считать S до тех пор, пока выражение под знаком логарифма больше 1. Определить k - количество вычисленных S C++
C++ Ввод произвольных символов до тех пор, пока не будет введен символ q
Просматривать массив до тех пор, пока не встретится 0 C++

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

Или воспользуйтесь поиском по форуму:
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
14.07.2013, 13:14     Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х) #20
Цитата Сообщение от alsav22 Посмотреть сообщение
Так уж и не было?
речь о посте #14, ибо ТС про него писал.
Yandex
Объявления
14.07.2013, 13:14     Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х)
Ответ Создать тему
Опции темы

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