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.
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.
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.
27 juil. 2017 à 15:48
ce qui permet d'avoir une complexité logarithmique au lieu d'une complexité linéaire...
27 juil. 2017 à 15:56
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.
27 juil. 2017 à 16:05
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.
27 juil. 2017 à 16:13
Pour le niveau débutant, je suis d'accord avec toi.