Как-то раз решая ету - задачу столкнулся с вот такой проблемой :
Я написал своё решение и хотел её проверить только на Dev C++ и Microsoft Visual Studio 2010
выходят разные ответы. Вот exe файл от Visual и exe файл от Dev c++.
Вот input : 911
Должно быть
output :
9 2
1 1
YES
Объясните пожалуйста почему так?
Я написал своё решение и хотел её проверить только на Dev C++ и Microsoft Visual Studio 2010
выходят разные ответы. Вот exe файл от Visual и exe файл от Dev c++.
Вот input : 911
Должно быть
output :
9 2
1 1
YES
Объясните пожалуйста почему так?
g++ (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5int fact(int x)
{
if (x > 0)
return x * fact(x - 1);
if (x == 0)
return 1;
}
int main()
{
cout << fact(-1);
}
Предупреждения не выдаёт даже с -Wall. Ну не умеет обрабатывать компилятор рекурсию.
Непонятно, какое отношение рекурсия имеет к предупреждению. Компилятор же здесь не на алгоритм должен опираться, а на завершение функции при отсутствии return (borland, например, предупреждает).
А что, если
int fact(int x)
{
if (x > 0)
return 0;
if (x == 0)
return 1;
}
то предупреждает?
На всякий случай перепроверил с MinGW'шным компилятором - тоже на первом варианте не выдаёт warning.
Хотя вы, конечно, правы: по логике вещей тут рекурсия никак не влияет на завершение функции.
Но заметить очевидную ветку (x < 0), в которой ничего не возвращается и никакая рекурсия не вызывается он должен.
Если уж g++ странный, то кто же нормальный...
Интересно, а что будет ещё через два поста в этой ветке?