Partage
  • Partager sur Facebook
  • Partager sur Twitter

Retour méthode.

    3 février 2012 à 20:07:07

    Salut tout le monde, je ne comprend pas pourquoi ce code me retourne 9 !

    public class Main 
    {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) 
    	{
    		System.out.println(population3(3));
    
    	}
    	public static int population3(int nb)
    	{
    		if(nb == 0)
    		{
    			return 0;
    		}
    		else
    		{
    			return population3(nb - 1) + 3;
    		}
    	}
    
    }
    

    Pourtant moi j'aurai pensé que cela renvoi 0 ...
    Vu que on teste la condition 3 est != de 0 donc on renvoi de nouveau la fonction mais pour 3-1 ! etc jusqu'à atteindre 0 et donc après 3 exécutions de la fonction, le résultat devrait satisfaire la première condition et ainsi renvoyer la valeur 0 ...
    Merci d'avance.

    • Partager sur Facebook
    • Partager sur Twitter
      3 février 2012 à 20:25:16

      Salut,

      Une fonction qui s'appelle elle-même est appelée récursive. C'est le cas de la tienne.

      maintenant regarde :

      nb = 3 tu fais l'appel. tu tombe sur
      return fct(3-1) + 3

      fct(nb - 1) est exécuté, tu devrais retourné

      return fct(2-1) + 3 + 3

      fct(nb - 1) est exécuté encore une fois

      return fct(1-1) + 3 + 3 + 3

      et là, nb = 0 donc tu retourne 0. Au final le tout premier return devient

      return 0 + 3 + 3 + 3 // = 9

      ce qu tu renvois

      Hedi
      • Partager sur Facebook
      • Partager sur Twitter
        20 février 2012 à 1:22:04

        J'ai compris, merci pour ton aide :)
        • Partager sur Facebook
        • Partager sur Twitter

        Retour méthode.

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown