1

Quelqu'un peut-il m'expliquer quel intérêt y a t il dans le fait d'éviter le plus que possible d'avoir recours à un procédé récursif ?
Le gentil timide du 64

2

Quelques dangers du récursif :

- plus difficile à comprendre et à débuguer
- peut provoquer des débordements de la pile
- risques de boucles infinies
- etc

Mais qui a dit d'éviter ça le plus possible ?
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

3

Un de mes profs. D'ailleurs je suis en train d'experimenter un nouvel algorithme pour la Tour de Hanoi (présent dans la section Programmation Avancée du manuel) pour éviter le récursif. Et dans ma première version ... j'y étais presque!
Le gentil timide du 64

4

Ca serait intéressant que tu lui demandes pourquoi alors happy
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

5

2> Ça dépend.

Si tu programmes en langage fonctionnel genre CAML, le récursif est quasi-obligatoire. En revanche, pour du C, c'est pas conseillé dans la mesure où chaque procédure prend un peu de RAM...

[edit] khrawç

6

3>

Non justement ... j'allais corriger le Post.
J'ai arrêté ma scolarité depuis 2 ans sad
Mais ce n'est que maintenant que je m'attaque à ce problème.

4>

Ah oui ... du genre SCHEME aussi (celui que j'ai étudié). C'est sûr que là ...

Le gentil timide du 64

7

./5 > En CAML, le compilo "dérécursifie" le code récursif et le traduit en une version itérative en interne, lorsqu'il génère le code. C'est pour ça que ça ne pose pas de problème de performance... Après il semble qu'en termes de conception, le récursif est bien adapté au CAML.
Mais en C/C++, le compilo n'optimise pas (ou peu) la récursivité, et ça peut donner lieu à des performances moindres. Micheal Abrash obtenait un gain de 15-20% lorsqu'il réécrivait en version itérative ses algos récursifs.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

8

C'est bon. Merci Sasume, grâce au mot "dérécursifie" j'ai trouvé ce que je voulais sur le NET. smile
Pourquoi réinventer la roue roll

Pour ceux que ça intéresse : http://www.chambily.com/recursivite/chap_VIII_4.htm

... Tout compte fait, je vais essayer de continuer ma méthode. J'aurais sans doute plus de facilité pour l'adapter aux autres algo récursifs (si je la réussis, bien sûr).
Le gentil timide du 64

9

La distinction importante n'est pas "récursif vs itératif", mais "récursif non-terminal vs. itératif ou récursif terminal"... En ML ou en Scheme, on ne programme pas en itératif, mais on essaye quand même de programmer en récursif terminal à chaque fois que c'est possible : d'un point de vue algorithmique, la récursivité terminale et l'itérativité sont rigoureusement équivalentes, c'est juste la façon dont tu l'écris qui change ^^

Bref la différence entre récursivité non-terminale et récursivité terminale c'est que dans le premier cas il y a un état qui est sauvegardé sur la pile par le compilateur (et donc sur lequel tu n'as aucun contrôle), alors que dans le second cas la pile est écrite explicitement dans les arguments que tu passes à la fonction récursive terminale smile (ou, dans le cas itératif, gardée explicitement en tant que variable de boucle)
L'avantage concret c'est que tu peux sauvegarder nettement moins de choses que ce que sauvegarderait le compilateur, et tu peux même parfois te dispenser d'avoir une pile happy

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

10

la plupart du temps tu peux transformer une fonction récursive non-terminale en une fonction récursive terminale en utilisant des continuations

et l'avantage du récursif, c'est que c'est comme ça que pense l'être humain smile
avatar
I'm on a boat motherfucker, don't you ever forget

11

-la plupart du temps +toujours (non ??)
mais bon écrire en CPS à la main c'est vite un petit peu compliqué (et vivent les parenthèses... cheeky)
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

12

Sally
: -la plupart du temps +toujours (non ??)

Bah heu ouais, je pense aussi pke c ce qui'il se passe vraiment en fait...

13

Oui, a l'éxécution c'est de l'itératif, enfin certain algo peuvent etre assez chiant en ittératif a ecrire.. (je ne prendrais pour exemple que le parcourt d'un arbre n-aire de taille inconnue...)
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

14

sauf que tu as besoin de garder O(log n) noeud en mémoire en récursif "classique", alors qu'en réalité tu n'as besoin d'en garder que O(1) ^^
(et puis c'est pas franchement compliqué, node = node.child || node.sibling || node.parent.sibling || node.parent.parent.sibling || ... smile)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

15

Et la marmotte trigic
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

16

?

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

17

node = node.child || node.sibling || node.parent.sibling || node.parent.parent.sibling || ...


Rien de plus facile a ecrire !
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

18

Godzil :
enfin certain algo peuvent etre assez chiant en ittératif a ecrire..

Ouais, c'est clair, mais la qn est pas la je veux dire:
transformer un algo recursif en un algo iteratif est toujours faisable

19

Je n'ai point dit le contraire chapo
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.