• [^] # Re: Pas de liaison mécanique ?

    Posté par . En réponse à la dépêche Encore un exemple de code spaghetti : Toyota. Évalué à 5.

    Le problème de la récursivité, c'est que, basiquement, à chaque sous-appel d'une fonction récursive, tu empile un nouveau contexte de fonction, ce qui augmente donc la pression sur la pile qui est de taille limitée. Si tu fais trop souvent, paf, tu peux exploser ta pile, faire un "stack overflow" avec possiblement plein de conséquence pas drôle. C'est ce qu'ils expliquent un peu slide 26 (même si certains arguments me paraissent fallacieux, entre autre sur la terminaison).

    Tu peux faire de l'analyse de l'espace mémoire nécessaire en connaissant ton facteur max de récursion, et combien te coûte exactement chaque appel sur la pile mais c'est évidemment plus compliqué que d'analyser une bête boucle.

    Ce problème peut être mitigé si tu fais de la récursion terminale, et si le compilateur implémente le tail-call optimization. Dans ces cas là, tu n'empile pas de contexte de fonction, et tu as le même coût en mémoire qu'une simple boucle. OCaml et d'autres implémentent cette optimisation, mais ce n'est pas le cas de la majorité (voir tous) compilateurs C.