Рекурсивная функция поиска НОД возвращает непонятное число - 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;

Объяснение кода листинга программы

В данном коде написана рекурсивная функция поиска НОД (наибольшего общего делителя) двух чисел. Список действий в коде:

  1. Проверить, больше ли значение переменной y нуля.
  2. Если y больше нуля, то выполнить рекурсивный вызов функции nod с аргументами y и (x mod y).
  3. Если y меньше или равно нулю, то присвоить переменной nod значение x.
  4. Конец функции. В данном коде используются следующие переменные:
  5. x - аргумент функции, значение которого уменьшается на каждом шаге рекурсии.
  6. y - аргумент функции, значение которого проверяется на больше нуля.
  7. nod - результат выполнения функции, т.е. НОД двух чисел. Код работает корректно, если значения аргументов x и y являются целыми неотрицательными числами.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5
Похожие ответы