Un doute sur un Tuto [Résolu]

Whismeril 10601 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 décembre 2017 Dernière intervention - 27 juil. 2017 à 15:36 - Dernière réponse : Whismeril 10601 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 décembre 2017 Dernière intervention
- 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.

Afficher la suite 

5 réponses

Répondre au sujet
KX 15100 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 16 décembre 2017 Dernière intervention - Modifié par KX le 27/07/2017 à 15:42
0
Utile
4
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
KX 15100 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 16 décembre 2017 Dernière intervention - 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...
Whismeril 10601 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 décembre 2017 Dernière intervention - 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.
KX 15100 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 16 décembre 2017 Dernière intervention > Whismeril 10601 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 décembre 2017 Dernière intervention - 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.
Whismeril 10601 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 18 décembre 2017 Dernière intervention > KX 15100 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 16 décembre 2017 Dernière intervention - 27 juil. 2017 à 16:13
C'est exact, coquille à corriger donc.

Pour le niveau débutant, je suis d'accord avec toi.
Commenter la réponse de KX

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.