Приведите примеры рекурсии - C (СИ)
Формулировка задачи:
наведите примеры рекурсии. спасибо.
Решение задачи: «Приведите примеры рекурсии»
textual
Листинг программы
#include <stdlib.h>
#include <stdio.h>
// рекурсивная функция вычисляет НОД двух натуральных чисел
int gcd( int a, int b ) {
return b ? gcd( b, a % b ) : a;
}
int main() {
int a, b;
printf( "Введите два целых числа " );
scanf( "%d%d", &a, &b ); // отсутствует проверка ввода
if ( a == 0 && b == 0 ) {
printf( "НОД данных чисел = 0\n" );
return EXIT_SUCCESS;
}
if ( a == 0 || b == 0 ) {
printf( "НОД данных чисел не существует!\n" );
return EXIT_SUCCESS;
}
printf( "НОД данных чисел = %d\n", gcd( abs( a ),abs( b ) ) );
return EXIT_SUCCESS;
}
Объяснение кода листинга программы
- В данном коде реализована рекурсивная функция gcd(int a, int b), которая вычисляет НОД (наибольший общий делитель) двух натуральных чисел.
- Если одно из чисел равно 0, то НОД вычисляется по формуле: НОД(a,b) = НОД(b,a mod b).
- Если оба числа равны 0, то НОД вычисляется как 0.
- Если одно из чисел равно 0, то НОД не существует и выводится сообщение об этом.
- Если оба числа не равны 0, то выводится сообщение с найденным НОД.
- В функции main() требуется ввести два целых числа.
- Если введенные числа удовлетворяют условию (не оба равны 0), то вызывается функция gcd(abs(a),abs(b)).
- Результат вычисления функции gcd() выводится на экран.
- Если введенные числа не удовлетворяют условию (оба равны 0 или оба не равны 0), то выводится сообщение об ошибке и программа завершается.