39 / 46 / 3
Регистрация: 04.06.2013
Сообщений: 1,532
1

Рекурсивный алгоритм

27.03.2015, 20:42. Показов 1533. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток
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
#include <iostream>
#include <cmath>
using namespace std;
 
float rec(int x,int n)
{
    if (n != 0)
    {
        return (pow(x,n)/n) * rec(x,n--);
    }
    else
    {
        return 1;
    }
 
}
 
void main()
{
    setlocale(LC_ALL,"ru");
    cout << "Введите X\n> ";
    int x = 0;
    cin >> x;
    cout << "\nВведите n\n> ";
    int n;
    cin >> n;
    float res = rec(x,n);
    cout << " Ответ: "<< res << endl;
}
Задача вычислить xn/n! методом рекурсии, но visual выдает ошибку Необработанное исключение по адресу 0x003312B0 в lab5.exe: 0xC00000FD: Stack overflow (параметры: 0x00000001, 0x00342FFC). Подскажите, в чем проблема. Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.03.2015, 20:42
Ответы с готовыми решениями:

Рекурсивный алгоритм F
Привет всем! Помогите пожалуйста как решается данная функция, если F = 6. Вот код программы:...

Рекурсивный алгоритм
помогите плиз представить в рекурсивный алгоритм Массив A proverka=1 Цикл для i:=1 до 10...

Рекурсивный алгоритм
помогите пожалуйста Представить в рекурсивный алгоритм Цикл пока ((proverka=1) и (k&gt;1) ) ...

рекурсивный алгоритм
Уважаемые программисты! Есть задача: разработать рекурсивный алгоритм на с++ для нахождения самого...

8
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
27.03.2015, 20:45 2
Лучший ответ Сообщение было отмечено SanychBY как решение

Решение

Цитата Сообщение от SanychBY Посмотреть сообщение
C++
1
return (pow(x,n)/n) * rec(x,n--);
если я не ошибаюсь, вот здесь рекурсия уходит в бесконечность, т.к. постфиксный инкремент.
1
39 / 46 / 3
Регистрация: 04.06.2013
Сообщений: 1,532
27.03.2015, 21:26  [ТС] 3
Kerry_Jr, действительно, верно

Добавлено через 12 минут
Может еще подскажите, почему он возвращает 1.#INF. Вроде деления на 0 быть не должно.
0
Эксперт PHP
4898 / 3898 / 1615
Регистрация: 24.04.2014
Сообщений: 11,405
27.03.2015, 21:32 4
Цитата Сообщение от SanychBY Посмотреть сообщение
Вроде деления на 0 быть не должно.
А как сейчас код выглядит? Если постфиксный декремент заменен на префиксный, то будет UB.
0
39 / 46 / 3
Регистрация: 04.06.2013
Сообщений: 1,532
27.03.2015, 21:33  [ТС] 5
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
#include <iostream>
#include <cmath>
using namespace std;
 
float rec(int x,int n)
{
    if (n)
    {
        return (pow(x,n)/n) * rec(x,--n);
    }
    else
    {
        return 1;
    }
 
}
 
void main()
{
    setlocale(LC_ALL,"ru");
    cout << "Введите X\n> ";
    int x = 0;
    cin >> x;
    cout << "\nВведите n\n> ";
    int n;
    cin >> n;
    float res = rec(x,n);
    cout << "Ответ: "<< res << endl;
    system("pause");
}
0
Эксперт PHP
4898 / 3898 / 1615
Регистрация: 24.04.2014
Сообщений: 11,405
27.03.2015, 21:34 6
Лучший ответ Сообщение было отмечено SanychBY как решение

Решение

SanychBY, вместо --n n-1
1
39 / 46 / 3
Регистрация: 04.06.2013
Сообщений: 1,532
27.03.2015, 21:36  [ТС] 7
Цитата Сообщение от Jewbacabra Посмотреть сообщение
SanychBY, вместо --n n-1
Действительно работает. А можете пояснить?
0
Эксперт PHP
4898 / 3898 / 1615
Регистрация: 24.04.2014
Сообщений: 11,405
27.03.2015, 21:43 8
Цитата Сообщение от SanychBY Посмотреть сообщение
А можете пояснить?
Неопределенное поведение
Компилятор может сначала подставить начальное значение n и только потом выполнить декремент, но может сначала вычислить декремент и вместо n в остальных местах использовать новое значение
1
39 / 46 / 3
Регистрация: 04.06.2013
Сообщений: 1,532
27.03.2015, 21:44  [ТС] 9
Цитата Сообщение от Jewbacabra Посмотреть сообщение
Неопределенное поведение
Компилятор может сначала подставить начальное значение n и только потом выполнить декремент, но может сначала вычислить декремент и вместо n в остальных местах использовать новое значение
0
27.03.2015, 21:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.03.2015, 21:44
Помогаю со студенческими работами здесь

Рекурсивный алгоритм
Даны натуральные числа &quot;N&quot; и &quot;M&quot; надо решить с помощью с++ не могу переставить с этим кодом с++...

рекурсивный алгоритм
задание было такое (я не раз обращался с ним уже): построить алгоритм вычисления значения аргумента...

рекурсивный алгоритм
В общем я уже намучился с этим заданием... Дело такое, алгоритм составлен, но не совсем такой,...

Рекурсивный алгоритм Дейкстры
Добрый день, необходима помощь в алгоритме trains - матрица, сохраняющая длины ребер stations -...

Рекурсивный алгоритм перестановок
Подскажите, почему не происходит замусоривания массива used, в котором хранятся данные об...

Рекурсия, рекурсивный алгоритм
Не работает програма, можете исправить, или обьяснить, что не правильною #include &lt;iostream&gt;...


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

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

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