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