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 Java Discussion :

Récursivité comment la méthode travaille-t'elle ?


Sujet :

Langage Java

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Points
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Par défaut Récursivité comment la méthode travaille-t'elle ?
    Bonjoiur tout le monde,

    Nous étudions pour l'instant la récursivité.

    J'ai un exemple mais je ne comprends pas le résultat qui pourtant est correcte.

    Je travaille sur base de la suite de Fibonacci :

    1 1 2 3 5 8 13, etc

    A partir du 3e, chaque nombre est obtenu en additionnant les 2 précédent.

    J'ai un petit programme qui calcule le Nième nombre de celui qu'on rencontre au clavier :


    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
    public class Fibonacci 
    {
    	public static void main (String [] args)
    	{
    		System.out.println("Entrez un nombre, je vous calcule Fibonacci");
    		System.out.println(fibonacci(Clavier.lireInt()));
    		
    	}
    	
    	public static long fibonacci (int nb)
    	{
    		long res;
    		if ((nb==2) || (nb == 1))
    		res = 1;
    		else
    		res = fibonacci(nb-1) + fibonacci (nb-2);		return res;
    	}
    }
    ce que je ne comprends pas, c'est la méthode fibonacci:

    Je comprends bien qu'on crée une variable nommée res de type long, que si le chiffre entré au clavier est 2 ou 1, la réponse sera d'office 1.

    ce que je ne comprends pas, c'est comment on arrive à un résultat comme 17711 en lui donnant comme nombre 22.

    Si je lis bien la phrase en bleue, on devrait faire nb-1 donc 20 + nb-2 donc 19, ça ferait alors 39, comment arrive-t'on à 17711 ?

    Comment c'est méthode travaille-t'elle ?

    Merci d'avance pour votre aide.

    beegees

  2. #2
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Points
    3 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Par défaut
    C'est simple, mais c'est assez abstrait pour déranger ceux qui s'y frotte. En fait, la récursivité c'est la répétition d'une même méthode (en gros, j'ai pas appris ça à l'école), mais tu dois déjà avoir une définition plus juste que la mienne. Dans ton cas, c'est très simple. Tout l'interet de la méthode est là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    res = fibonacci(nb-1) + fibonacci (nb-2);
    Dans la méthode fibonacci, si le paramètre nb n'est pas 1 ou 2, on appelle deux nouvelle méthode fibonacci avec : le paramètre nb - 1 et une autre avec nb - 2. Un schéma s'impose pour mieux comprendre (mes talents à Paint sont limités, désolé). Tant que le paramètre ne sera pas égal à 1 ou à 2, ta méthode en appellera 2 autres, qui en appelleront 4 autres(2 chacune) et ainsi de suite. Tu vois le bordel ? Le meilleur moyen de bien comprendre tout ça c'est d'utiliser System.out.println(), avec une phrase et les valeurs en cours pour bien voir combien de fois ta méthode est appelé et avec quel paramètre. Quand le chemin sera réalisé, et que de nouvelles méthodes crées par des méthodes fibonacci auront comme paramètre 1 et 2, tes méthodes vont, récursivement dans le sens inverse, retourner les valeurs pour te donner ton résultat. Bonne chance.

  3. #3
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Points
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Par défaut
    Bonjour Janitrix,

    Joyeuse Pâques.

    Merci pour ta réponse.

    Je comprends mieux maintenant comment on arrive à cet énorme résultat de 17711.

    Ton explication est très claire, merci !

    J'avais pensé au System.out.println().

    Merci encore.

    beegees

Discussions similaires

  1. Comment relier 3 requête entres-elles ?
    Par DeFCrew dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 19/06/2006, 15h49
  2. Réponses: 4
    Dernier message: 30/05/2006, 10h30
  3. Réponses: 2
    Dernier message: 19/12/2005, 23h54
  4. [Méthode travail] "Reverse Règles Métier"
    Par Eowyn dans le forum Méthodes
    Réponses: 4
    Dernier message: 15/12/2004, 14h39
  5. [INDEPENDANT]Comment declarer son travail ?
    Par xufux dans le forum Freelance
    Réponses: 21
    Dernier message: 04/07/2004, 00h23

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