Python

Необходимо вычислить сумму двух дробей a/v;d/c. Используйте рекурсию, чтобы найти общий знаменатель двух чисел.

Предположим для простоты, что a, v, d, c - натуральные числа. Тогда
a/v + d/c = (ac+vd)/(cd).
Чтобы полученная дробь была несократимой, нужно её сократить на наибольший общий делитель её числителя и знаменателя. А нахождение НОД двух натуральных чисел можно делать при помощи отдельной рекурсивной функции, то есть примерно так:
 def gcd(x, y): z = x % y; return gcd(y, z) if z else y 
a, v, d, c = map(int, input().split()); u, v = a*c+v*d, v*c
g = gcd(u, v); print(u // g, '/', v // g, sep = '')
И наименьшее общее кратное знаменателем здесь вообще не при делах, так как a/v или d/c изначально не предполагаются сократимыми, а числитель получающейся дроби может оказаться имеющим с эти самым наименьшим общим кратным знаменателей наибольший общий делитель, не равный единице.
Денис Ярыгин
Денис Ярыгин
66 572
Лучший ответ
Чтобы найти сумму двух дробей, необходимо привести их к общему знаменателю и сложить полученные дроби. Можно использовать рекурсивную функцию для нахождения наименьшего общего кратного знаменателей дробей, а затем привести каждую дробь к этому знаменателю и выполнить сложение.

Вот как может выглядеть рекурсивная функция нахождения наименьшего общего кратного двух чисел:
 def lcm(a, b): 
"""Нахождение наименьшего общего кратного двух чисел"""
if a == 0 or b == 0:
return 0
else:
return abs(a * b) // gcd(a, b)
Здесь используется функция gcd, которая находит наибольший общий делитель двух чисел:
 def gcd(a, b): 
"""Нахождение наибольшего общего делителя двух чисел"""
while b:
a, b = b, a % b
return a
Теперь можно написать функцию для нахождения суммы двух дробей:
 def add_fractions(a, b, c, d): 
"""Сложение двух дробей"""
# Находим общий знаменатель
common_denominator = lcm(b, d)

# Приводим первую дробь к общему знаменателю
a *= common_denominator // b
b = common_denominator

# Приводим вторую дробь к общему знаменателю
c *= common_denominator // d
d = common_denominator

# Складываем дроби
numerator = a + c

# Сокращаем дробь
divisor = gcd(numerator, common_denominator)
numerator //= divisor
common_denominator //= divisor

return numerator, common_denominator
Здесь a/v и d/c - это дроби, которые нужно сложить, причем a, b, c и d - это их числители и знаменатели соответственно. Функция add_fractions возвращает кортеж с числителем и знаменателем полученной суммы.

Пример использования:
 >>> add_fractions(1, 4, 3, 8) 
(5, 8)
Здесь мы складываем дроби 1/4 и 3/8 и получаем дробь 5/8 в качестве результата.