Recursivité help

Statut
N'est pas ouverte pour d'autres réponses.

Tekura

Elite
Salut, j'ai un gros problème. J'ai beau me démerder en java et algo. Dès qu'il y a du recursif je suis perdu Oo

Y a rien à faire, j'arrive pas à penser de manière récursive (8 mois que j'essai).

Avez-vous un truc ?, des techniques, des conseils pour m'aider à comprendre :-(

Si vous connaissez des bons sites( ou livres ) qui expliquent vraiment bien les étapes pour résoudre un problème récursif, je suis preneur.

Merci d'avance ;)
 

Froggy

fake geek
en fait le truc ... c'est de pas essayer de comprendre. :)

tu résouds le problème pour le cas initial (en t'asssurant que si on sait résoudre un cas, on peut résoudre le cas"+1") et tu réappel ta fonction pour le cas suivant ;)

le fait de suivre chaque itération devient très vite un gros gros casse tête donc vaut mieux pas essayer de comprendre (au début du moins).
 
1er
OP
Tekura

Tekura

Elite
Froggy a dit:
tu résouds le problème pour le cas initial (en t'asssurant que si on sait résoudre un cas, on peut résoudre le cas"+1") et tu réappel ta fonction pour le cas suivant ;)
le cas initial, j'ai pas trop de soucis, mais c'est précisément là où le problème se situe "s'assurer le cas +1".

(pourrais-tu illustrer par un exemple stp)

le cas basic du factorielle je l'ai piger, mais dès qu'il s'agit de faire une recherche ou une methode ds un arbre binaire... je bloque totallement :-(
 

ozilrit

Elite
D'un autre côté, quel est l'utilité de cet arbre ? Est-ce un cas unique ?
 
1er
OP
Tekura

Tekura

Elite
C'est surtout pédagoque^^.

En gros c'était des methode du genre, ajouter quelque chose a la bonne place ds un arbre, supprimer, etc

Faire des lecture In-Ordre, Pré-ordre, etc

Mais les arbres sont juste des exemples, c'est ds 90% des cas, quand y a du recursif a faire, suis completement paumer :-(
 

ozilrit

Elite
Sous quel forme se présente ton arbre ?
 

La Poubelle

Pou'r allé Danché
Une fonction récursive doit s'adapter à un cas précis. D'où l'importatnce de l'analyse.

Avec une question aussi vaguer, il est
impossible de ne pas te dire d'aneries
 
1er
OP
Tekura

Tekura

Elite
ce sont des arbre binaire de recherche (String).

l'arbre est composer d'un noeud pour la racine et de sous arbres gauche et droit. (Je suis en premier a l'IPL, si tu connais le programme).

et les methode demander sont, getProfondeur(), getNombreDelément(), plusieur toString (inOrdre, préOrdre, postOrdre), estFeuille(), estEquilibré(), etc...
 
1er
OP
Tekura

Tekura

Elite
La Poubelle a dit:
Une fonction récursive doit s'adapter à un cas précis. D'où l'importatnce de l'analyse.

Avec une question aussi vaguer, il est
impossible de ne pas te dire d'aneries
C'est pour cela que j'aimerais avoir une "technique d'approche" parce que c'est vraiment mon point noir :'(
 

Ahava

Revenant
Essaie de voir les choses ainsi :


T'as un arbre, sur lequel tu veux faire des choses. Dis-toi que le cas "initial", c'est "ce que je fais comme traitement quand je rencontre un noeud".

Donc si tu veux compter le nombre de noeuds contenant une chaine, ca serait, imaginons : "cpt++ ;".

Ensuite tu te dis que chaque noeud peut avoir des enfants, donc tu vas tester chacun d'entre eux aussi !

Donc en gros ca donne, si je me trompe pas (il est tard), dans la classe de ton arbre par exemple :
Code:
private int getNbElems(Noeud n){
    int cpt = 0 ;
    if ( n.getElement() != null ) cpt++ ; // je compte la chaine courante
    if ( n.getFilsGauche() != null ) cpt = cpt + getNbElems(n.getFilsGauche()); // j'appelle la méthode sur le fils gauche
    if ( n.getFilsDroit() != null ) cpt = cpt + getNbElems(n.getFilsDroit()); // pareil mais sur le fils droit
    return cpt ;
Et tu fais une autre méthode, publique cette fois, qui va etre appellée quand tu instanciera ta classe Arbre, par ex :
Code:
public int getNbChaines (){

    return this.getNbElems( this.racine ); // si tu as un attribut racine hein :p
}
Si tu procede ainsi je pense que tu peux arriver à tout faire :) Donc décompose chaque étape pour un élément, et ses enfants s'il en as, et le tour est joué :)

Bien sur ce code, je viens de le taper donc ca compilera surement pas, et faut adapter ca, évidemment...

Perso j'adore la récusivité, je trouve ca archi-puissant si bien utilisé ! Donc tu es bien tombé là :p


ps : pre-ordre, c'est quoi ? C'est pas l'ordre dans lequel lire l'arbre ? genre gauche-courant-droit par ex ? Bah dans ton traitement tu fais d'abord le comptage du fils gauche au lieu de faire d'abord l'élément courant, etc. !

J'espere que ca t'as aidé :)
 
1er
OP
Tekura

Tekura

Elite
merci, je vois un peu plus clair, vais essayer de bosser un peu tout ca :)

Perso j'adore la récusivité, je trouve ca archi-puissant si bien utilisé ! Donc tu es bien tombé là :p
Je connais un gars qui est pareil ^^ perso je trouve qu'il faut etre taré pour aimer ca :D
 

La Poubelle

Pou'r allé Danché
Tekura a dit:
merci, je vois un peu plus clair, vais essayer de bosser un peu tout ca :)


Je connais un gars qui est pareil ^^ perso je trouve qu'il faut etre taré pour aimer ca :D
Mouais, tout dépend les besoins et les applications.

Cette méthode de programmation ne doit pas être utilisé à tort et à travers.
 

Ahava

Revenant
La Poubelle a dit:
Mouais, tout dépend les besoins et les applications.

Cette méthode de programmation ne doit pas être utilisé à tort et à travers.
C'est certain ça ! Perso à part à l'école, j'ai pas encore eu l'occasion de faire de la récursivité depuis :p
 

kawash

Elite
La récursivité je trouve ça avantageux au niveau lisibilité/simplification du code, mais mon dieu qu'es ce que ça bouffe en ressources ^^
 

La Poubelle

Pou'r allé Danché
Ahava a dit:
C'est certain ça ! Perso à part à l'école, j'ai pas encore eu l'occasion de faire de la récursivité depuis :p
De temps en temps ^^

La dernière fois, c'etait une procédure stocké qui appelait des fonctions sql de façon recursive :p
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut