Рекурсивный алгоритм Евклида - C (СИ)
Формулировка задачи:
Всем привет! Переделайте пожалуйста мой алгоритм Евклида с вычитанием на рекурсивный.
unsigned k = 0;
unsigned nod(unsigned c, unsigned d)
{
while (c != d)
{
if (c > d)
c = c - d;
else
d = d - c;
}
k = c;
return c;
}
void main()
{
unsigned a, b;
printf("Vvedite (a): ");
scanf_s("%u", &a);
printf("Vvedite (b): ");
scanf_s("%u", &b);
nod(a, b);
printf("NOD: %u", k);
_getch();
}
Может кто-то помочь? Сам никак не справляюсь,не могу понять просто данную тему.
ЗАРАНЕЕ СПАСИБО!!!
Решение задачи: «Рекурсивный алгоритм Евклида»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
unsigned int nod(unsigned int c, unsigned int d)
{
if (c == d)
return d;
else
{
if (c > d)
return nod(c-d,d);
else
return nod(c,d-c);
}
}
int main(int argc, char *argv[])
{
unsigned int x=45, y=63;
printf("%d\n",nod(x,y));
system("PAUSE");
return 0;
}
Объяснение кода листинга программы
В данном коде представлен рекурсивный алгоритм Евклида, который находит НОД (наибольший общий делитель) двух чисел. Алгоритм работает следующим образом:
- Если первое число (c) равно второму числу (d), то НОД равен d.
- Если первое число (c) больше второго числа (d), то алгоритм вызывает сам себя, передавая в качестве аргументов разность c и d (c-d) и d.
- Если первое число (c) меньше второго числа (d), то алгоритм вызывает сам себя, передавая в качестве аргументов c и разность d и c (d-c).
В данном коде:
- функция nod() реализует рекурсивный алгоритм Евклида
- в функции main() создаются две переменные x=45 и y=63, которые передаются в функцию nod()
- результат работы функции nod() выводится на экран
- после этого вызывается функция system(
PAUSE), которая приостанавливает выполнение программы до нажатия клавиши - в конце программы возвращается 0, что означает успешное выполнение программы