IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Tableaux] renvoyer un tableau à l'aide d'une focntion récursive


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 41
    Points : 32
    Points
    32
    Par défaut [Tableaux] renvoyer un tableau à l'aide d'une focntion récursive
    Bonjour,

    J'ai un petit soucis qui me bloque dans mon développement.

    J'ai créé une fonction récursive qui implémente un tableau.
    Lorsque je recupère mon tableau il n'y a rien dedans.

    Voici le code de mon programme principal qui lance la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	$arbre = array();
    	$tab = array();
    	$tab = rechercheMinPrim(10,$s,1,$arbre);
    	print_r($tab);
    Le print_r($tab); n'affiche rien.

    Et voici ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function rechercheMinPrim($nbSommet,$sommet,$n,$arbre)
    	{
    	if ($n==$nbSommet+1)
    		{
    		//print_r($arbre);
    		return ($arbre);
    		//$rechercheMinPrim = $arbre;
    		}
    	$arbre[$n] = 'po';
    	$n = $n + 1;
    	//return($arbre);
    	rechercheMinPrim($nbSommet,$sommet,$n,$arbre);
    	}
    Ce que je ne comprends pas, c'est que le print_r($arbre) me renvoie mon tableau et quand je fais le return il ne renvoie rien??

    Ai-je un problème de syntaxe sur le return ? Mes variables sont-elles bien typées?

    Merci d'avance de votre aide

  2. #2
    Membre éclairé Avatar de nako
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2003
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2003
    Messages : 577
    Points : 663
    Points
    663
    Par défaut
    Salut,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return rechercheMinPrim($nbSommet,$sommet,$n,$arbre);
    devrait mieux corriger le problème.
    a+

  3. #3
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut return n'est pas une fonction
    Ouais et je rappelle que return n'est pas une fonction donc n'a pas besoin de parenthèse.

    peut très bien s'écrire

    Les variables sont nécessaires si return retourne une expression qui nécessite elle-même des parenthèses.
    Business, Stratégie, Leadership
    Toujours à l'écoute du marché : Surtout en Suisse ! ;-)

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 41
    Points : 32
    Points
    32
    Par défaut
    Merci pour les solutions mais cela ne change rien

    le "return rechercheMinPrim($nbSommet,$sommet,$n,$arbre);" fai tourner en boucle mon application et le return sans parenthese ne change rien.
    *
    ...

  5. #5
    Membre éclairé Avatar de nako
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2003
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2003
    Messages : 577
    Points : 663
    Points
    663
    Par défaut
    Est-ce que $n arrive à 11 ?
    Quand ça boucle, si tu mets des traces, comment évoluent tes variables ?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 41
    Points : 32
    Points
    32
    Par défaut
    $n arrive bien à 11.

    $arbre est bien rempli, print_r($arbre) renvoie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [1] => po [2] => po [3] => po [4] => po [5] => po [6] => po [7] => po [8] => po [9] => po [10] => po )
    Par contre apres le return :

    je le recupere par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tab = rechercheMinPrim(10,$s,1,$arbre);
    et quand je l'affiche avec :

    rien ne s'affiche !!

  7. #7
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut return again
    Je n'ai jamais dit que le return sans parenthèses changerait quelque chose. C'était simplement une précision au sujet de return qui est un mot-clé PHP et non une fonction.
    Business, Stratégie, Leadership
    Toujours à l'écoute du marché : Surtout en Suisse ! ;-)

  8. #8
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Bonsoir,

    Je me suis penché un petit peu sur ton soucis. Après la mise ne place de quelques traces et quelques instants de réflexion, j'ai vu comme toi que cela ne marchait pas.

    J'ai donc examiné plus avant ton code, et j'ai essayé de visualiser le fonctionnement.

    Premier passage, n différent de 11, on augmente n et on relance la fonction.
    ...
    Dernier passage, n=11, on renvoie le tableau arbre
    on remonte comme ca jusqu'au premier appel sans jamais utilisé la valeur de retour. Au dernier appel, la fonction ne renvoie rien. On se situe après l'appel récursif à rechercheMinPrim.

    Et on voit bien que la fonction n'a aucune valeur de retour !!!

    La solution que j'ai utilisé est de rajouter, comme précisé plus haut, un return devant l'appel récursif.

    PS : A mon avis, pour faire ça la récursivité c'est trop.

    Bonne soirée
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

Discussions similaires

  1. Recherche à l'aide d'une fonction récursive
    Par Phoenix89 dans le forum Shell et commandes GNU
    Réponses: 32
    Dernier message: 24/04/2014, 10h58
  2. Besoin d'aide sur une requête récursive
    Par billybob2 dans le forum Développement
    Réponses: 5
    Dernier message: 05/02/2013, 09h54
  3. Besoin d'aide pour une requête récursive
    Par sqldeb dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 30/11/2009, 17h05
  4. Réponses: 1
    Dernier message: 28/12/2007, 10h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo