Рекурсивная функция поиска НОД возвращает непонятное число - Free Pascal
Формулировка задачи:
Программа. Полностью. Выводит на экран:
4207524
При замене последней строки в функции nod := x на writeln(x) выводит правильный НОД.
Что не так?
program nodmod;
function nod(x, y: longint): longint;
begin
if (y > 0) then
nod(y, x mod y)
else
nod := x;
end;
begin
writeln(nod(105, 25));
end.Решение задачи: «Рекурсивная функция поиска НОД возвращает непонятное число»
textual
Листинг программы
function nod(x, y: longint): longint; begin if (y > 0) then nod(y, x mod y) else nod := x; end;
Объяснение кода листинга программы
В данном коде написана рекурсивная функция поиска НОД (наибольшего общего делителя) двух чисел. Список действий в коде:
- Проверить, больше ли значение переменной
yнуля. - Если
yбольше нуля, то выполнить рекурсивный вызов функцииnodс аргументамиyи(x mod y). - Если
yменьше или равно нулю, то присвоить переменнойnodзначениеx. - Конец функции. В данном коде используются следующие переменные:
x- аргумент функции, значение которого уменьшается на каждом шаге рекурсии.y- аргумент функции, значение которого проверяется на больше нуля.nod- результат выполнения функции, т.е. НОД двух чисел. Код работает корректно, если значения аргументовxиyявляются целыми неотрицательными числами.