Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
znseday
18 / 18 / 7
Регистрация: 20.03.2012
Сообщений: 505
1

В VS 2015 не работает рекурсивная функция, которая работает в C++Builder

25.01.2019, 03:15. Просмотров 926. Ответов 3
Метки нет (Все метки)

Добрый день!
Перенес блок кода из старого учебного проекта под C++Builder, который там всегда стабильно работал, на VS 2015. Одна из рекурсивных функций (расчет факториала) не работает в VS - выдает глючный отрицательный результат.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int ExFact(int n);
 
int main()
{
    int x;
    printf("input x:");  scanf_s("%i", &x);
    printf("Factorial = %i\n", ExFact(x));
 
    system("pause");
    return 0;
}
 
int ExFact(int n)
{
    if (n > 1)
        return n*ExFact(n - 1);
}
В чем может быть дело? Почему на одном компиляторе работает, на другом - нет?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2019, 03:15
Ответы с готовыми решениями:

Не работает рекурсивная функция
У меня есть поле 80 на 80 клеток, с препятствиями. Функция должна в отдельный массив записавыть в...

Не работает рекурсивная функция
Добрый день, имеется задание: Напишите вспомогательную функцию nth, которая в качестве...

Не работает рекурсивная функция
Файл "Tree.js" function changeDisplay(id){ //Функция открытия закрытия дерева var ul =...

Как работает рекурсивная функция
Есть функция вывода бинарного дерева struct Node { int x; Node *l,*r; }; void...

Неправильно работает рекурсивная функция
Всем привет. Ребят, есть вот такая задача: Есть организация. У неё есть всякие подразделения...

3
Someone007
3594 / 2633 / 1151
Регистрация: 09.05.2015
Сообщений: 6,456
Завершенные тесты: 1
25.01.2019, 04:54 2
Что у вас возвращает функция, если условие if (n > 1) не выполняется?

Добавлено через 5 минут
Вам даже компилятор предупреждение выдает
warning C4715: 'ExFact': not all control paths return a value
1
znseday
18 / 18 / 7
Регистрация: 20.03.2012
Сообщений: 505
25.01.2019, 13:36  [ТС] 3
Someone007, в этом случае мне от нее ничего не нужно)
Если добавить
C++
1
else return 1;
то все работает, и в этом, конечно, есть логика.
Но почему тогда в C++Builder'е все работает и так (без else)?
0
liv
2964 / 1822 / 301
Регистрация: 07.10.2015
Сообщений: 4,210
Завершенные тесты: 1
25.01.2019, 15:57 4
Цитата Сообщение от znseday Посмотреть сообщение
в этом случае мне от нее ничего не нужно)
Вот тут совершенно не правы. Любая рекурсия должна иметь возможность выхода.
В Вашем первоначальном коде этого не было! В таком случае возвращалось какое-то случайное число из стека!
Что именно, это уже зависело от реализации компилятора!!! Поэтому и могло получиться, что в Builder-е случайно срабатывало.
Это однозначно ошибка!
0
25.01.2019, 15:57
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2019, 15:57

Объяснить как работает рекурсивная функция и стек вызовов на моем примере
Объясните пожалуйста как работает рекурсивная функция и стек вызовов на моем примере. Здесь...

Почему данный код работает в builder 6 а в builder 10 не работает?
SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) | WS_EX_LAYERED);...

C++ builder. Написать программу, которая работает в одном из двух режимов.
Написать программу, которая работает в одном из двух режимов. Если в текущем каталоге имеется...


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

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

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