RunUO-FR

Forum de support pour RunUO en français.
 
AccueilAccueil  FAQFAQ  RechercherRechercher  MembresMembres  GroupesGroupes  S'enregistrerS'enregistrer  Connexion  

Partagez | 
 

 2) Les méthodes (récursives)

Aller en bas 
AuteurMessage
Scriptiz

avatar

Messages : 101
Date d'inscription : 02/09/2008
Localisation : Belgium

MessageSujet: 2) Les méthodes (récursives)   Dim 7 Sep - 23:51

Pour continuer dans la lignée du premier tuto, voyons les méthodes récursives.

Résumons vite les 4 premiers cas généraux abordés dans le précédent tuto sur les méthodes (simples) avant de commencer .

Une méthode peut retourner
1) Une variable ou un nombre.
return 3; ou return maVariable;

2) Le résultat d'un calcul (composés de variables, nombres, ...).
Code:
private int doubler(int monNombre)
{
  return monNombre * 2;
}

3) Le résultat d'un test logique
Code:
private int estDivisibleParDeux(int nombre)
{
  return ((nombre % 2) == 0);
}

4) Le résultat d'une autre méthode
Code:
// Retourne un en-tête en fonction du sexe du destinataire

private string entete(string destinataire, char sexe)
{
  if(sexe == 'F')
  {
    return "Chère " + destinataire;
  }
  else
  {
    return "Cher " + destinataire;
  }
}

// Retourne une signature en ajoutant une salutation

private string salutations(string nom, string prenom)
{
  return "Bien à vous,\n\n\t" + nom + prenom;
}

// Retourne la lettre complète à partir des éléments donnés en utilisant les deux fonctions ci-dessus

private string creerLettre(string destinataireLettre, string sexeDest, string nomAuteur, string prenomAuteur, string message)
{
  return entete(destinataireLettre, sexeDest) + "\n\n" + message + "\n\n" + salutations(nomAuteur, prenomAuteur);
}
(J'ai différenciés les noms de variables récupérés dans creerLettre par rapport aux deux autres méthodes qu'elle utilisise pour faciliter la compréhension, mais les noms peuvent être les mêmes car ils s'agit de variables locales à la fonction qu'elle "habite").

Commencons maintenant les méthodes récursives, véritable but de ce tuto

5) Se retourner elle-même...
C'est ici que ça devient un peu plus chaud je pense Smile Il s'agit donc de Récursivité
Prenons le simple exemple de cette méthode qui calcule la factorielle de n (noté n!)
L'on peut donc créer la méthode suivante qui est une méthode itérative:
Code:
private int factorielle(int n)
{
  int res = 1;
  for (int i = 1 ; i <= n ; i++)
  {
    res = res*i;
  }
  return res;
}
Rappel : Factorielle de 3 = 1 * 2 * 3

Maintenant d'autres penserons d'une autre manière et préféreront faire une méthode récursive (qui s'appelle elle-même) :
Code:
private int sommeCumulée(int n)
{
  return ((n==0)? 0 : n + sommeCumulée(n-1));
}
Traduction : Si n est égal à zéro, on retourne 0, le cas contraire, on retourne n à quoi l'on rajoute le résultate de la méthode SommeCumulée à laquelle on passe en paramètre n soustrait de un.

Plus simplement, on va ajouter les nombres uns à uns en commencant par 'n' et en terminant par 0.

Bref je sais que c'est pas toujours facile à comprendre au premier abord, si c'est le cas, faites quelques tests, et ça ira mieux ^^

Pour terminer, quel est l'avantage de la récursivité... ?

Il permet dans certains cas une complexité moins importante (parfois le contraire attention !). Ici dans les deux méthodes sommeCumulée, la complexité est la même (O(n)). En gros il va faire n fois quelque chose, donc ici faites comme vous le voulez.

Par contre prenons l'exemple d'une méthode récursive calculant un nombre de la suite de fibonacci donné à 'n' position :
Code:
private int fibonacci(int n)
{
  return ((n==0)? 0 :((n==1)? 1 : fibonacci(n-1) + fibonacci(n-2)));
}
Nous avons là une récursivité monstrueuse !! De complexité O(n²). Donc à éviter à tout prix. Une solution mathématique sera meilleure dans ce cas là ^^ (petit défi : trouvez la formule qui donne le nombre à la position n dans la suite de fibonacci Razz)

On pourrait s'étendre sur le sujet encore un peu mais ça devient trop technique et ça ne servirait à rien dans le cadre souhaité ici lol! Voilà, donc je vous souhaite une bonne récursivisisation scratch
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://uoclassic.free.fr/
tresorunikin



Messages : 3
Date d'inscription : 17/01/2009

MessageSujet: Juste un commentaire   Sam 17 Jan - 1:24

Merci pour ce tuto!
Moi j'ai plus compris ce qui n'est pas le but de ce tuto. Seulement vous avez raison de dire
C'est ici que ça devient un peu plus chaud je pense
Une autre question c'est que vous n'avez pas explique5) Se retourner elle-même... ou peut être que moi je ne l'ai pas déniché.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Scriptiz

avatar

Messages : 101
Date d'inscription : 02/09/2008
Localisation : Belgium

MessageSujet: Re: 2) Les méthodes (récursives)   Dim 25 Jan - 21:15

C'est toujours quelque chose de difficile à faire passer que la notion de récursivité (le point 5 que tu n'a pas bien compris).

Relis tout ce qui se trouve après le point 5, sinon fait quelque recherches sur Google pour en comprendre le principe ainsi que l'application :

Principe de récursivité :
http://fr.wikipedia.org/wiki/R%C3%A9cursivit%C3%A9

Algorithme récursif :
http://fr.wikipedia.org/wiki/Algorithme_r%C3%A9cursif

Fonctions récursives :
http://fr.wikipedia.org/wiki/Fonctions_r%C3%A9cursives

Récursion terminale (pas valable pour tout les langages, par exemple Java y fait défaut) :
http://fr.wikipedia.org/wiki/R%C3%A9cursion_terminale

Bonne chance, si tu ne saisis pas du premier coup, relis lentement et plusieurs fois, fait d'autres recherches, ...

Mais sinon la récursivité on peut s'en passer, ce n'est vraiment pas souvent très pratique scratch
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://uoclassic.free.fr/
Contenu sponsorisé




MessageSujet: Re: 2) Les méthodes (récursives)   

Revenir en haut Aller en bas
 
2) Les méthodes (récursives)
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Notes finales ( CC & EX) du module Méthodes Numériques I

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
RunUO-FR :: Tutoriaux Scripts :: Tutoriaux C#-
Sauter vers: