Как реализовать рекурсивную функцию с помощью лямбда-выражений - PullRequest
0 голосов
/ 13 января 2019

Моя задача - реализовать функцию factorial, используя только лямбда-выражения. Вот что я попробовал

fact = lambda n: if n == 0 return 1 else ...

Я застрял!

Edit: исправить ошибку синтаксиса оператора

fact = lambda n: 1 if n == 0 else ...

Я снова застрял ..

Как это сделать?

1 Ответ

0 голосов
/ 13 января 2019

Простой подход - использовать имя переменной, которой вы присваиваете lambda, как способ рекурсивного вызова кода:

>>> fact = lambda n: 1 if n <= 0 else n * fact(n - 1)
>>> fact(10)
3628800
>>> 

Существуют более сложные решения, включающие передачу lambda выражений в lambda выражений или Y-комбинаторов. Ваш подход уже был обречен использованием if ... else ... оператора . Выражение lambda может содержать только другие выражения , но не операторы , поэтому вам нужно будет использовать вместо этого синтаксис ... if ... else ... expression .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...