Pour continuer dans les problèmes de Python, pas de récursion utilisable :
% python
>>> def fac(n):
... def fac_aux(n, p):
... if n == 1:
... return p
... return fac_aux(n - 1, n*p)
... return fac_aux(n, 1)
...
>>> fac(5)
120
>>> fac(999)
[ ... ]
File "<stdin>", line 5, in fac_aux
File "<stdin>", line 5, in fac_aux
RuntimeError: maximum recursion depth exceeded
% perl
sub fac {
sub fac_aux {
my ($n, $p) = @_;
return $p if $n == 1;
return fac_aux($n - 1, $n * $p);
}
my $n = shift;
fac_aux($n, 1);
}
printf "\n%d - %d\n", fac(5), fac(1000000);
^D
120 - -1
(Bon, le résultat est numériquement faux, mais l'exemple porte sur la récursion; sinon j'aurais utilisé une bibliothèque bignum.)
On ne parlera pas de l'impossibilité de dire qu'on veut déclarer à l'avance ses variables pour au moins éviter les typos (il paraît que c'est un avantage).
[^] # Re: Pourquoi les gens critiquent toujours python avec de mauvais argumen
Posté par Frédéric Perrin (site web personnel) . En réponse au journal Journal inutile : Python c'est complêtement pourri, j'ai un exemple. Évalué à -1.
% perl sub fac { sub fac_aux { my ($n, $p) = @_; return $p if $n == 1; return fac_aux($n - 1, $n * $p); } my $n = shift; fac_aux($n, 1); } printf "\n%d - %d\n", fac(5), fac(1000000); ^D 120 - -1(Bon, le résultat est numériquement faux, mais l'exemple porte sur la récursion; sinon j'aurais utilisé une bibliothèque bignum.) On ne parlera pas de l'impossibilité de dire qu'on veut déclarer à l'avance ses variables pour au moins éviter les typos (il paraît que c'est un avantage).