RÉCURSIVITÉ : FONCTION DE CALCUL DE PUISSANCE ET FACTORIELLE

coucou747 12336 Messages postés mardi 10 février 2004Date d'inscriptionModérateurStatut 30 juillet 2012 Dernière intervention - 31 mai 2007 à 19:47 - Dernière réponse : Whismeril 10516 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 12 décembre 2017 Dernière intervention
- 27 juil. 2017 à 16:15
Commentaires sur un tutoriel Créer une discussion Signaler Répondre
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

http://codes-sources.commentcamarche.net/faq/596-recursivite-fonction-de-calcul-de-puissance-et-factorielle

Afficher la suite 
12336Messages postés mardi 10 février 2004Date d'inscription ModérateurStatut 30 juillet 2012 Dernière intervention
cs_demicerveau 2 Messages postés samedi 9 décembre 2006Date d'inscription 25 janvier 2008 Dernière intervention - 25 janv. 2008 à 00:30
$p doit etre indiqué comme static ou encore comme variable globale. Ce qui donnerai :
$p=1;
function my_pow ( $n )
{
if ( $p == 0 )
{
return ( 1 );
}
return ( my_pow ( $n , $p -1 ) * $n );
}
Inconveniant: il faut initialiser $p avant l'appel.

Sinon il y a :
function my_pow ( $n, $p)
{
if ( $p == 0 )
{
return ( 1 );
}
return ( my_pow ( $n , $p -1 ) * $n );
}
Inconveniant : Il faut que le parseur transbahute la variable $p (comme s'il n'avait que ça à faire)

Il existe encore (En C je fais comme çi-dessous mais je ne sais pas si ça fonctionne en php) :
function my_pow ( $n )
{
static $p;
if ( $p == 0 )
{
return ( 1 );
}
return ( my_pow ( $n , $p -1 ) * $n );
}
Le fait de déclarer $p static assure que la variable $p utilisera toujours la meme zone mémoire pour stocker ses valeurs. Le fait de la déclarer dans la fonction fait qu'elle n'est pas visible en dehors et "appartient" (en quelque sorte) à cette fonction. De fait il n'y a pas de confusion avec une éventuelle autre variable de meme nom.

Bonne programmation

Demi Cerveau
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscriptionModérateurStatut 30 juillet 2012 Dernière intervention - 25 janv. 2008 à 13:45
sinon tu peux balader des adresses

function pow($n, &$p){
...
}
carolelesarcs 1 Messages postés lundi 3 décembre 2007Date d'inscription 20 mars 2008 Dernière intervention - 20 mars 2008 à 18:24
Ok, mais comment s'y prendre quand on a $p<1 comme 1/12 (pour le calcul d'une mensualisation )?
ouberka79 2 Messages postés lundi 17 novembre 2008Date d'inscription 14 janvier 2009 Dernière intervention - 14 janv. 2009 à 12:17
merci pour votre aide
Bonjour,
merci pour cette fonction récursive de la puissance !
je l'ai adaptée en powershell si cela intéresse :

function eval_pow {
param (
$n # valeur à "exposer"
,$p # puissance qui décroît à chaque passage récursif
)
if ($p -eq 0) {
return 1
}
$VL = (eval_pow $n ($p-1)) * $n
return $VL
}
Commenter la réponse de coucou747

9 réponses

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.