Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 162
1

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

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

Author24 — интернет-сервис помощи студентам
Вводим число х. Функция должна вызывать сама себя до тех пор пока 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.07.2013, 18:57
Ответы с готовыми решениями:

While и repeat. Вводить числа до тех пор пока произведение четных не станет больше 20
вводить числа до тех пор пока произведение четных не станет больше 20. Решить двумя способами, на...

Прибавлять число к самому себе до тех пор пока оно не станет больше 20
Прибавлять число к самому себе до тех пор пока оно не станет больше 20. Использовать цикл while.

Вводить положительные числа до тех пор, пока сумма их произведений не станет больше 10000
Вводить положительные числа в переменные a и b до тех пор, пока сумма произведений вводимых чисел...

Увеличивать введенное число в два раза до тех пор, пока оно не станет больше 1000
1 задача:Ввести число a(0&lt;a&lt;10).Увеличивать его в два раза до тех пор,пока оно не станет больше...

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

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

Не по теме:

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

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

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

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

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

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

Добавлено через 41 секунду
Thinker, ВВожу число "х" и передаю его как параметр в функцию, хотел попробовать рекурсивно вычислять сумму до тех пор пока сумма не превысит введеное число "х".
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
12.07.2013, 02:43 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;
}
1
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 162
12.07.2013, 07:18  [ТС] 11
alsav22, Спасибо за помощь, но зачем в функцию передавать два параметра??? Почему нельзя обойтись одним?
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
12.07.2013, 14:51 12
Цитата Сообщение от Nikko12 Посмотреть сообщение
alsav22, Спасибо за помощь, но зачем в функцию передавать два параметра??? Почему нельзя обойтись одним?
Что-то должно меняться чтобы был выход из рекурсии. Если x не меняется, значит sum должна меняться в функции. Можно передавать только x, но тогда x нужно менять в функции, чтобы при определённом значени был выход из рекурсии.
0
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 162
12.07.2013, 18:11  [ТС] 13
alsav22, Спасибо.
0
49 / 23 / 3
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
12.07.2013, 18:37 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;
}
1
Комп_Оратор)
Эксперт по математике/физике
8950 / 4704 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
12.07.2013, 19:13 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;
}
1
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 162
13.07.2013, 15:27  [ТС] 16
Цитата Сообщение от soican Посмотреть сообщение
сумму чего ты хочешь вычислять? тот код который тебе написали будут возвращать x(если x четное) или х+1 (если x нечетное)
Я именил sum +=2; на sum ++; и все ок. Все отлично считается. Меня не интересовала сумма, меня интересовала организация рекурсиии и в чем заключалась моя ошибка.
0
49 / 23 / 3
Регистрация: 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
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
13.07.2013, 17:45 18
Цитата Сообщение от Nikko12 Посмотреть сообщение
Я именил sum +=2; на sum ++; и все ок. Все отлично считается. Меня не интересовала сумма, меня интересовала организация рекурсиии и в чем заключалась моя ошибка.
ну вы шутник, в том примере и не было никакой рекурсии
0
5498 / 4893 / 831
Регистрация: 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
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
14.07.2013, 13:14 20
Цитата Сообщение от alsav22 Посмотреть сообщение
Так уж и не было?
речь о посте #14, ибо ТС про него писал.
0
14.07.2013, 13:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.07.2013, 13:14
Помогаю со студенческими работами здесь

Вводить числа до тех пор, пока их сумма не станет больше 100. Эту сумму и число слагаемых вывести на экран
1)Составить программу, которая вводит с клавиатуры целые числа до тех пор, пока их сумма не станет...

Перезапуск интернет-подключения до тех пор, пока IP-адрес не станет выделенным
В общем нужно, чтобы батник перезапускал инет пока ip-адрес не станет выделенным, а потом завершал...

Цикл с предусловием выполняется до тех пор, пока условие выполнения не станет ложным
Цикл с предусловием выполняется до тех пор, пока условие выполнения не станет ложным, и...

Суммировать до тех пор, пока очередное слагаемое по модулю не станет меньше eps
Текст задачи такой: Даны ε, массив b(12). Вычислить M=\frac{\sqrt{x^3+1}}{\cos...


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

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