Как написать рекурсивный код по нахождению НОК?
Помогите реализовать рекурсию. Написал код для нахождения НОК двух чисел, но по заданию нужно использовать рекурсивный подход решения.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp5
{
class Program
{
static double GCD(double a, double b)
{
double a1;
a1 = a * b;
if (b < 0)
b = -b;
if (a < 0)
a = -a;
while (b > 0)
{
double temp = b;
b = a % b;
a = temp;
}
return a1 / a;
}
static void Main(string[] args)
{
Console.WriteLine("***Введите 4 числа через пробел***");
string s = Console.ReadLine();
string[] x = s.Split(' ');
double a = Double.Parse(x[0]);
double b = Double.Parse(x[1]);
double c = Double.Parse(x[2]);
double d = Double.Parse(x[3]);
a = LCM(a,b);
Console.WriteLine("НОК={0}", a);
Console.ReadLine();
}
}
}
Ответы (1 шт):
Автор решения: Jagailo
→ Ссылка
Допустим, нужно найти НОК и НОД двух чисел, причём, что-то из этого нужно найти рекурсивно.
using System;
namespace Test
{
internal static class Program
{
private static void Main()
{
Console.Clear();
Console.WriteLine("Введите a и b:");
Console.Write(" a = ");
var a = Convert.ToInt64(Console.ReadLine());
Console.Write(" b = ");
var b = Convert.ToInt64(Console.ReadLine());
var gcd = GetGCD(a, b);
var lcm = a * b / gcd;
Console.WriteLine($"\nНОД равен {gcd}\nНОК равен {lcm}");
Console.ReadKey();
}
private static long GetGCD(long a, long b)
{
if (a == 0)
{
return b;
}
if (b == 0)
{
return a;
}
return a > b ? GetGCD(a % b, b) : GetGCD(a, b % a);
}
}
}
