Optimiser une fonction factorielle en python

Sep 26 2020

J'ai donc réalisé cette fonction avec le paramètre de déballage (* x) , mais je veux lui faire afficher le résultat sans le renvoyer, et je veux une bonne optimisation, ce qui signifie que j'ai toujours besoin que ce soit une fonction à deux lignes

1.def fac(*x):
    2.return (fac(list(x)[0], list(x)[1] - 1)*list(x)[1]) if list(x)[1] > 0 else 1//here i need the one line to print the factorial

J'ai essayé d'y parvenir en implémentant lambda mais je ne savais pas comment passer le paramètre * x

Réponses

4 JackAshton Sep 27 2020 at 01:59

Votre lambda factoriel est correct. Je suppose que vous souhaitez calculer les factorielles pour une liste disons [1, 2, 3] et produire les résultats, voici comment vous pouvez y parvenir.

fact = lambda x: x*fact(x-1) if x > 0 else 1
print(*[fact(i) for i in [1, 2, 3]])

Qui produira: 1, 2, 6

Une autre option, si vous avez python 3.8 est d'utiliser une compréhension de liste avec le nouvel opérateur morse (: =), c'est un peu plus délicat mais calculera et produira toutes les factorielles jusqu'à n inclus tout en restant dans vos deux lignes requises.

fac, n = 1, 5
print(*[fac for i in range(1, n+1) if (fac := fac*i)])

Qui produira: 1, 2, 6, 24, 120