Un doute sur un Tuto

Résolu
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 - 27 juil. 2017 à 15:36
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 - 27 juil. 2017 à 16:13
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

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127
Modifié le 27 juil. 2017 à 15:42
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
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127
27 juil. 2017 à 15:48
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...
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
27 juil. 2017 à 15:56
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.
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127 > Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024
27 juil. 2017 à 16:05
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.
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656 > KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024
27 juil. 2017 à 16:13
C'est exact, coquille à corriger donc.

Pour le niveau débutant, je suis d'accord avec toi.
0
Rejoignez-nous