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