есть формула, но она не работает. Подскажите, где поменять в формуле данные, чтобы моя формула сработала? Мне важно понять, что именно с этой формулой не так. спасибо
Даны два натуральных числа A и B. Требуется найти их наибольший общий делитель.
Примечание. В программе запрещается использовать циклы.
a = 42
b = 12
def find_f(a, b):
if a!=0 and b!=0:
if a > b:
a = a % b
else:
b = b % a
find_f(a, b)
return a,b
print('Результат формулы:', find_f(a, b))
Python
Отсутствие отступов: В Python отступы имеют значение и определяют блоки кода. Вам нужно добавить отступы для определения тела функции find_f.
Отсутствие базового случая для рекурсии: В вашей функции find_f отсутствует базовый случай, который указывает на окончание рекурсии. Без базового случая функция будет рекурсивно вызывать саму себя бесконечно.
Неправильный порядок обновления переменных a и b: При использовании алгоритма Эвклида для нахождения НОД, нужно обновлять значения a и b в правильном порядке. Вы должны присваивать a новое значение a % b, а b новое значение b % a.
Помогите решить задачу. python
Вот это - и есть ошибка:
А можно через свёртку и тоже без циклов:
Конечно, внутри, "под капотом", циклы есть, но это можно и о print сказать, а print же использовать не запрещено.
find_f(a, b)
return a,b
Значение от вложенного вызова find_f выбрасывается, а вместо этого возвращаются значения переданных туда параметров. А должно быть так: return a if not b else b if not a else find_f(a, b)
(не забываем об условии окончания рекурсии)А можно через свёртку и тоже без циклов:
from itertools import accumulate as ac, repeat as rp, takewhile as tw
from operator import itemgetter as ig
def gcdstep(t, _):
a, b = t
return (b, a % b)
def find_gcd(a, b):
*_, (_, g) = tw(ig(1), ac(rp(0), gcdstep, initial = sorted((a, b), reverse = True)))
return g
print(find_gcd(*map(int, map(input, ('',) * 2))))
Конечно, внутри, "под капотом", циклы есть, но это можно и о print сказать, а print же использовать не запрещено.
Аслан Сериков
бред.
Олег Дук
спасибо огромное!
def find_f(a, b):
if a and b:
return find_f(a % b, b) if a > b else find_f(a, b % a)
return a, b
print('Результат формулы:', find_f(a, b))
a = 42
b = 12
def find_gcd(a, b):
if b == 0:
return a
return find_gcd(b, a % b)
gcd = find_gcd(a, b)
print("Наибольший общий делитель:", gcd)
В вашем коде ошибки:Отсутствие отступов: В Python отступы имеют значение и определяют блоки кода. Вам нужно добавить отступы для определения тела функции find_f.
Отсутствие базового случая для рекурсии: В вашей функции find_f отсутствует базовый случай, который указывает на окончание рекурсии. Без базового случая функция будет рекурсивно вызывать саму себя бесконечно.
Неправильный порядок обновления переменных a и b: При использовании алгоритма Эвклида для нахождения НОД, нужно обновлять значения a и b в правильном порядке. Вы должны присваивать a новое значение a % b, а b новое значение b % a.
Олег Дук
спасибо за ответ.
Но мне бы именно по своей формуле понять, почему она не отрабатывает корректно.
Отступы загружаю, но сайт их обратно выравнивает по левому краю
Но мне бы именно по своей формуле понять, почему она не отрабатывает корректно.
Отступы загружаю, но сайт их обратно выравнивает по левому краю
Похожие вопросы
- Помогите решить задачу python
- Помогите решить задачу Python,очень нужно
- Помогите, пожалуйста, решить задачу Python
- Пожалуйста, помогите решить задачу на Python. Упражнения 57,58,59,60.
- Помогите решить задачу на Python. Никак не могу решить задачу, больше дня не могу найти ответ! Никакой код не работает.
- Пожалуйста, помогите решить задачу на Python. Упражнение 124, 125, 146
- Помогите решить задачу на python! Упражнение 41,45,47.
- Помогите решить задачу на python! Упражнение 49,50,51,52,53.
- Помогите решить задачу в яндекс-практикуме Python
- Помогите решить задачу на python!