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 :

Echo dans la fonction ou Echo de la fonction


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Echo dans la fonction ou Echo de la fonction
    Bonjour,

    J'ai pourtant un peu d'expérience avec PHP, mais quelque chose m'échappe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    function collatz($n, $a, $b, $i = 0) {
    	$i++;
     
    	if($i > 2000) {
    		echo "a";
    	}
    	elseif($n == 1) {
    		echo "b";
    	}
    	elseif($n > 1000000) {
    		echo "c";
    	}
    	else {
    		// Odd or even
    		if($n & 1) {
    			collatz($a * $n + $b, $a, $b, $i);
    		}
    		else {
    			collatz($n / 2, $a, $b, $i);
    		}
    	}
    }
     
    collatz(7, 3, 1);
    Ce code retourne "a", "b" ou "c" (en l'occurrence ici "b").


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    function collatz($n, $a, $b, $i = 0) {
    	$i++;
     
    	if($i > 2000) {
    		return "a";
    	}
    	elseif($n == 1) {
    		return "b";
    	}
    	elseif($n > 1000000) {
    		return "c";
    	}
    	else {
    		// Odd or even
    		if($n & 1) {
    			collatz($a * $n + $b, $a, $b, $i);
    		}
    		else {
    			collatz($n / 2, $a, $b, $i);
    		}
    	}
    }
     
    echo collatz(7, 3, 1);
    La fonction retourne NULL.


    Je ne comprends pas pourquoi la deuxième version ne fonctionne pas. Est-ce qu'il y a quelque chose avec les fonctions récursives qui m'échappe ?

    Merci par avance pour votre aide !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    			collatz($a * $n + $b, $a, $b, $i);
    		}
    		else {
    			collatz($n / 2, $a, $b, $i);
    		}
    Là aussi, il faut des return.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    			return collatz($a * $n + $b, $a, $b, $i);
    		}
    		else {
    			return collatz($n / 2, $a, $b, $i);
    		}
    Une autre manière d'écrire (on retourne le résultat à la fin):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?php
    function collatz($n, $a, $b, $i = 0) {
    	$i++;
    	$retour = '';
    	if($i > 2000) {
    		$retour = "a";
    	}
    	elseif($n == 1) {
    		$retour = "b";
    	}
    	elseif($n > 1000000) {
    		$retour = "c";
    	}
    	else {
    		// Odd or even
    		if($n & 1) {
    			$retour = collatz($a * $n + $b, $a, $b, $i);
    		}
    		else {
    			$retour = collatz($n / 2, $a, $b, $i);
    		}
    	}
    	return $retour;
    }

  3. #3
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Bonjour,

    Dans ton premier code tu utilises des echo dans la fonction, donc tes comparaisons continuent, par exemple si tu prends $i = 3000 (donc $i > 2000), tu testes $n et tu fais des collatz récursifs.

    Mon conseil serait de définir un set de valeurs de test, et prendre des bonnes habitudes directement en testant ta fonction unitairement (car elle est simple à tester). Pour chaque valeur d'entrée et chaque test effectué dessus, tu prends une valeur sur la bordure basse, non inclue, bordure basse inclue, une centrale, une bordure haute inclue et une bordure haute non inclue.

Discussions similaires

  1. Problème avec echo dans une fonction et hors fonction
    Par morgan47 dans le forum Langage
    Réponses: 4
    Dernier message: 02/09/2015, 10h06
  2. Echo dans une fonction
    Par gege25 dans le forum Langage
    Réponses: 4
    Dernier message: 16/09/2011, 14h01
  3. [PHP-JS] Ecrire dans un javascript dynamiquement 'echo'
    Par nono3000 dans le forum Langage
    Réponses: 6
    Dernier message: 23/12/2005, 15h17
  4. Problème echo dans shell
    Par Dupont Lionel dans le forum Linux
    Réponses: 5
    Dernier message: 08/02/2005, 13h23
  5. probleme d' echo dans un batch
    Par zorian dans le forum Windows
    Réponses: 16
    Dernier message: 18/05/2004, 17h21

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