web-dev-qa-db-fra.com

Le code récursif est-il plus lent que le code non récursif?

Maintenant, je suis seulement un programmeur novice, mais ce que mes amis étudient la programmation me disent que ce code récursif est une bonne chose, cela conduit à moins de duplication de code et il semble plus élégant.

Maintenant, cela peut être tel que, mais chaque fois que j'ai essayé ma main avec un code récursif, j'ai toujours trouvé qu'il serait beaucoup plus lent que le code non récursif, je ne sais pas si c'est quelque chose à propos de la façon dont je l'ai utilisé mais Je doute fortement, je l'ai utilisé pour une chose assez simple, comme la génération de Numéro de Collatz et de Fibonacci, mais chaque fois que je l'ai comparé contre un code itératif normal, l'approche récursive sera constamment une horloge systématiquement deux fois sur les solutions itératives.

7

La récursion est plus lente et elle consomme plus de mémoire car elle peut remplir la pile. Mais il y a un travail autour appelé optimisation des appels quotidiens qui nécessite un peu plus de code plus complexe (puisque vous avez besoin d'un autre paramètre sur la fonction de transmission) mais est plus efficace car il ne remplit pas le empiler.

Malheureusement C # ne supporte pas cela Donc, je vous suggérerais d'utiliser la récursive avec précaution, car vous pourriez obtenir un débordement de pile pour de grandes valeurs.

En conclusion, dans les langues fonctionnelles que vous n'avez que de récursions et que vous devez y faire face; Mais dans les langues impératives, l'itération est plus naturelle et plus efficace. La majorité des langues impératives les plus utilisées ne soutiennent pas (Java, C #, Python) ou ne garantissent pas l'optimisation des appels queue (C, C++).

6
m3th0dman