Рекурсивная функция поиска НОД возвращает непонятное число - 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
являются целыми неотрицательными числами.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д