Iradrille, Loic et moi même n'avons pas affirmer que vous deviez penser de manière récursive ou que "la" définition (*) de la factorielle doit être récursive (par exemple), seulement qu'affirmer que c'est naturel n'était pas objectif. Ça l'est peut-être pour vous, mais pas pour d'autre ...
Et si je suis prêt à admettre que si l'on considère une population lambda cette affirmation est vrai, je le suis beaucoup moins dès que cette population est à caractère scientifique.
Au début je voulais pointer sur des liens SO où les meilleurs réponses montrent bien que la récursion est naturel pour de nombreux développeur, cependant je suis tombé sur un autre article dont la conclusion me plait :
http://www.ibm.com/developerworks/li...urs/index.html
(NB: J'ai pas lu l'ensemble de l'article)Citation:
Recursion is a great art, enabling programs for which it is easy to verify correctness without sacrificing performance, but it requires the programmer to look at programming in a new light. Imperative programming is often a more natural and intuitive starting place for new programmers which is why most programming introductions focus on imperative languages and methods. But as programs become more complex, recursive programming gives the programmer a better way of organizing code in a way that is both maintainable and logically consistent.
Oui, pour une personne lambda / un débutant, naturellement il va penser itératif. Mais pour quelqu'un qui commence à avoir des besoins plus importants, quelqu'un qui aura été "formé" (**) la récursion peut être un mode de penser totalement naturel (***).Citation:
La récursion est un art important, permettant de vérifier la justesse des programmes sans perdre de performance, mais elle demande aux développeurs d'adopter un nouveau point de vue. Les langages impératifs sont souvent plus naturel et intuitif pour les débutants, ce qui en font des langages et méthodes de choix pour les cours d’introduction. Mais plus les programmes deviennent complexes, plus la récursion apporte un meilleur façon d'organiser le code : il devient plus maintenable et logique.
(*) leternel : C'est quoi une "définition directe" ? Et quand bien même tu arriverais à définir clairement ce concept, je vois mal comment tu pourrais l'appliquer avec certitude à une notion mathématique aussi ancienne.
(**) peu importe la méthode de formation, et peu importe que ce soit une formation au maths ou plus spécifiquement à l'algorithmie (en général il faut pas avoir fait beaucoup d'algorithmie pour avoir fortement intégré le principe de récurrence, typiquement avoir travaillé sur les algorithmes de base des structures de données basiques suffit pour ça).
(***) quand on a du se forcer 10 ou 20 fois à adopter un nouveau point de vue pour résoudre un problème, la 21° fois, ça a tendance à être naturel.