Recursivité

Recursivité - PHP - Programmation

Marsh Posté le 15-03-2004 à 11:04:46    

Code :
  1. function CptVide($cell, $index, $max, $cpt)
  2. {
  3. /* Si on est à la fin on retourne le compteur */
  4. if ($index>=$max)
  5. {
  6.  return $cpt;
  7. }
  8. /* Si cellule pas vide on retourne le compteur */
  9. $i=$index+1;
  10. if ($cell[$i]!='')
  11. {
  12.  echo "30";
  13. }
  14. /* Si cellule vide et pas à la fin, on tente la prochaine */
  15. $cpt++;
  16. CptVide($cell,$index+1, $max, $cpt);
  17. }
  18. /* TEST */
  19. $cell[0]='1';$cell[1]='';$cell[2]='';$cell[3]='1';$cell[4]='';
  20. echo CptVide($cell, 0, 4, 0);


 
Salut,
 
j'essai de faire une fonction capable de compter le nombre de cellule vide à la suite d'une case valorisée.
 
Dans mon exemple la fonction devrait me retourner 2,
 
mais elle ne me retourne rien.
Je ne sais pas pourquoi?
 
Merci de votre aide.

Reply

Marsh Posté le 15-03-2004 à 11:04:46   

Reply

Marsh Posté le 15-03-2004 à 11:22:16    

Code :
  1. /* Si cellule pas vide on retourne le compteur */
  2.      $i=$index+1;
  3.      if ($cell[$i]!='')
  4.      {
  5.         echo "30";
  6.          
  7.      }


je sais pas si c'est une erreur de saisie mais cette partie ne fait pas du tout ce qu'il y a marqué en commentaire.
Donc en admettant que c'est plutot

Code :
  1. if ($cell[$index+1]!='')
  2.      {
  3.         return $cpp;
  4.      }


Bon bin même comme ça je comprends pas l'utilité de ta fonction. Parce qu'en admettant que tout marche comme tu veux sur le même exemple si j'envoie un echo CptVide($cell, 1, 4, 0); il va me retourner 1 alors que ma case 1 était vide.
 
Donc à mon avis tu t'es compliqué la vie pour rien et la récursivité est inutile.
 
Par ailleurs c'est pabo de nommer les paramètres d'un fonction de la même façon que les variables de ton script, en tout cas c'est au moins un bon moyen de si paumer!

Reply

Marsh Posté le 15-03-2004 à 11:35:55    

oups j'avais mal compris le problèmeuh :p


---------------
oui oui
Reply

Marsh Posté le 15-03-2004 à 11:39:38    

euh...
 
 
$i = $index
$compteur = 0
while $i < $max
{
   $i++;
   if $cell[$i] != ''
      return $compteur;
   $compteur++;
}
return $compteur


Message édité par art_dupond le 15-03-2004 à 11:44:44

---------------
oui oui
Reply

Marsh Posté le 15-03-2004 à 11:45:27    

Oui c'est return $cpt.
 
Mais le problème c'est que ça me retourne rien.
Alors qu'en faisant des echo je vois bien que ça passe au bon endroit.
 
Je n'appel cette fonction que si la cellule est pleine.
SI elle est vide elle m'interesse pas, car elle a intéressée la première cellule pleine à gauche.
 
et on ne peut pas commencer par une cellule vide.

Reply

Marsh Posté le 15-03-2004 à 12:38:36    

mais je comprends toujours pas pourquoi tu as besoin que ça soit récursif...  
Tu as une fonction qui est appelé pour une case donnée et qui doit s'arreter à la première case non vide suivant la case donnée.
Donc tu prends ce que t'as donné art_dupond, tu corriges toutes les fautes de synthaxe ( :o ) et ça fait ce que tu veux!!!

Reply

Marsh Posté le 15-03-2004 à 12:40:56    

sorry :( me rappelle plus comment c'est le php :p


---------------
oui oui
Reply

Marsh Posté le 15-03-2004 à 13:46:58    

Oui, pas besoin de recursivité.
 
Amalgame de souvenir de cours sur les arbres :D
 
Par contre ça peux marcher avec la recursivité (mais c'est moins performant)
Ce que j'aurais voulu savoir (pas pour cette fois :) ) c'est pourquoi le return semble ne pas fonctionner?
 
Merci de votre aide.
 

Reply

Marsh Posté le 15-03-2004 à 17:07:36    

Simple supposition :
 
L'appel récursif se trouvant plus bas que le return et n'étant pas suivit d'un autre return, il n'y a pas de retour de valeur pour la première éxecution (la condition du if est fausse => pas de return => appel récursif => retour de l'appel => ? => fin fonction). Il devrait y avoir un return à la place de mon ? dans le schéma incompréhensible que je viens d'écrire :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed