Un doute sur un Tuto [Résolu]

Signaler
Messages postés
15913
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 mai 2021
-
Messages postés
15913
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 mai 2021
-
Bonjour

ce tuto présente ce code
function my_pow($n)

{

    if($p==0)

    {

        return(1);

    }

    return(my_pow($n, $p-1)*$n);

}


Comme je n'y connais rien en PHP, je m'interroge sur l'homogénéité de
my_pow($n) //un seul paramètre
//...
return(my_pow($n, $p-1)*$n) //2 paramètres


C'est possible en PHP ça ?
Ou s'agit il d'une coquille à corriger? Ce serait plutôt ce qui ressort plutôt des premiers commentaires, mais celui de demicerveau semble dire le contraire.

1 réponse

Messages postés
16333
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 mai 2021
118
Bonjour,

Je ne connais pas PHP non plus, mais en toute logique je dirais qu'il faudrait écrire
function my_pow($n, $p)
sinon on ne sait pas d'où sort
$p
qui a ici un rôle d'exposant pour le calcul de
n^p
...
La confiance n'exclut pas le contrôle
Messages postés
16333
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 mai 2021
118
Au passage, je signales qu'il y a plus performant pour le calcul de la puissance... du coup je ne suis pas sûr de l'intérêt de ce tutoriel.

p^(2k)=(p^k)*(p^k)
ce qui permet d'avoir une complexité logarithmique au lieu d'une complexité linéaire...
Messages postés
15913
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 mai 2021
540
Salut, je pense que son idée de départ était de trouver un exemple de récursivité simple à montrer.

Et comme toi je me demande d'où sort $p.
Mais ce qui m'a le plus interpelé c'est le commentaire de demicerveau qui dit que cela est possible avec de code exact si $p est une variable static.

D'où ma question ici.
Messages postés
16333
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 mai 2021
118 >
Messages postés
15913
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 mai 2021

Le commentaire ne tient pas la route, dès lors que tu passes à l'appel récursif il est nécessaire que la valeur de $p ait changée et la fonction ne fait pas le changement de valeur d'une éventuelle variable $p statique ou autre, elle ne fait que appeler récursivement la fonction en lui passant un deuxième paramètre qu'elle ne gère pas en l'état.

De plus passer par une variable statique ce serait vraiment moche si elle doit être partagée par tous les calculs qui appellent la fonction (en particulier les appels récursifs suivants) quand on sait que lors du dépilement des instructions de l'appel récursif la résolution du calcul va se faire dans l'ordre inverse des appels...

Non, il manque juste un paramètre dans la déclaration de la fonction ;-)

NB. Dans un bon tutoriel sur la récursivité, il serait utile de parler de récursion terminale ce qui permet d'éviter l'usage de la pile... là on est au niveau d'une snippet de débutant.
Messages postés
15913
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 mai 2021
540 >
Messages postés
16333
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 mai 2021

C'est exact, coquille à corriger donc.

Pour le niveau débutant, je suis d'accord avec toi.