Форум сайта python.su
a_factaral = lambda n:(n>0 and ((n==0 and 1)+n)*a_factaral(n-1))+(n==0 and 1)
Офлайн
Это рекурсия, построенная на анонимной функции ( лямбда ).
def a_factral(n): return (n > 0 and ((n == 0 and 1) + n) * a_factaral(n - 1)) + (n == 0 and 1)
Офлайн
Мне хотелось бы узнать суть алгоритма и значение оператора and здесь
Офлайн
Mr.Geekman1. Суть алгоритма - реализация функции для вычисления факториала от целого числа n.
Мне хотелось бы узнать суть алгоритма и значение оператора and здесь
>>> False and 10 False >>> True and 10 10
>>> b = False >>> b + 5 5 >>> b = True >>> b + 5 6
Отредактировано old_monty (Май 1, 2016 18:51:52)
Офлайн
Я вот не могу понять до какого момента вычисляется возвращаемое значение. Ведь тут на лицо рекурсия. Буду рад, если кто то объяснит. Вообще удивился когда эта функция мне вернула значение.
Офлайн
Vlad_KiЧто здесь рекурсия, об этом я даже говорить не стал, настолько это очевидно. Ведь вычисление a_factaral(n) выполняется через вызов a_factaral(n-1) и т.д., пока не дойдет до вычисления a_factaral(1) или a_factaral(0), если n == 0, а потом идет обратная раскрутка стека. Основную трудность у ТС, как я понял, вызывают неочевидные логические операции - их действительно трудно понять, если ошибочно думать, что результат операции and может быть только True или False.
Я вот не могу понять до какого момента вычисляется возвращаемое значение. Ведь тут на лицо рекурсия.
Офлайн
Vlad_KiОно всегда вычисляется, на каждом шаге. Не может быть такого, что функция не вернёт число, где бы она не была вызвана.
Я вот не могу понять до какого момента вычисляется возвращаемое значение. Ведь тут на лицо рекурсия. Буду рад, если кто то объяснит. Вообще удивился когда эта функция мне вернула значение.
Vlad_KiЕсть такой приём при работе с рекурсией: задайся вопросом “Что делает функция на максимальной глубине?”
Я вот не могу понять до какого момента вычисляется возвращаемое значение.
def a_factaral(n): return (n > 0 and ((n == 0 and 1) + n) * a_factaral(n - 1)) + (n == 0 and 1)
a_factaral(n - 1)
def a_factaral(0): return (0 > 0 and ((0 == 0 and 1) + 0) * a_factaral(0 - 1)) + (0 == 0 and 1)
return False + 1
def a_factaral(1): return (1 > 0 and ((1 == 0 and 1) + 1) * a_factaral(1 - 1)) + (1 == 0 and 1)
def a_factaral(1): return (1 > 0 and ((1 == 0 and 1) + 1) * 1) + (1 == 0 and 1)
return ((False + 1) * 1) + False
def a_factaral(2): return (2 > 0 and ((2 == 0 and 1) + 2) * a_factaral(2 - 1)) + (2 == 0 and 1)
return (2 > 0 and ((2 == 0 and 1) + 2) * 1) + (2 == 0 and 1)
return ((False + 2) * 1) + False
Отредактировано py.user.next (Апрель 25, 2021 22:57:11)
Офлайн
py.user.next
Спасибо большое за развернутый ответ!
Офлайн