OVH Cloud OVH Cloud

erreur dans un article...

1 réponse
Avatar
Marc Collin
salut

sur cette page: http://www.javaperformancetuning.com/news/roundup052.shtml

on y parle de tail recusrive...

la version linéaire...

public int factorial(int n) {
int product = n;
for ( int i = n ? 1; i > 0; i--)
product *= i;
return product;
}

la version récursive

public int factorial(int n) {
if ( n == 0)
return 1;
else
return ( n * factorial( n ? 1));
}



et maintenant la tail récursive

public int factorial(int n) {
return factorialHelper( n, n-1);
}


public int factorialHelper( int product, int n) {
if ( n <= 0)
return product;
return factorial( n * product, n--); /*erreur ici*/
}

il semble avoir une erreur où je l'ai indiqué... à moins que javac soit
sou....


merci
--
www.laboiteaprog.com

1 réponse

Avatar
Shorty
Déjà, l'appel récursif se fait plutôt sur factorialHelper que sur
factorial (c'est ça l'erreur de compilo)

En plus, le n-- ne sert à rien puisqu'il ne décrémente la valeur de
n que dans la méthode courante (qui ne contient aucune instruction
après n--) et non dans l'appel récursif. Il faudrait donc plutôt :

return factorialHelper( n * product, n-1);

Du reste, je mettrais plutôt if ( n <= 1) que if ( n <= 0) ça évi te
un appel qui ne sert qu'à faire une multiplication par 1...

Faudrait vraiment qu'ils testent leur code avant d'écrire des
articles...