Bonjour je comprend pas comment peut-on parcourir une listes chainées de manière itérative ? Et quelle est la différences avec la manière récursive ?
Merci d'avance
Version imprimable
Bonjour je comprend pas comment peut-on parcourir une listes chainées de manière itérative ? Et quelle est la différences avec la manière récursive ?
Merci d'avance
Code:
1
2
3
4
5
6element = premier Tant que element non NULL on fait quelque chose ... element = element -> suivant Fin tant que
Un algo récursif s'appelle lui-même alors qu'un algo itératif, comme le montre Souviron, consiste en une boucle faisant varier un repère.
Voici l'exemple de Souviron écrit en récursif
Code:
1
2
3
4
5
6
7 FONCTION(element) DEBUT on fait quelque chose SI element->suivant non NULL FONCTION(element->suivant) FIN SI FIN
Mouaih, moi je ferais plutôt :
Ça permet de ne pas planter si on appelle la fonction avec NULL :aie:Code:
1
2
3
4
5
6
7 FONCTION(element) DEBUT SI element non NULL ALORS on fait quelque chose FONCTION(element->suivant) FIN SI FIN
A noter que comme la récursion est terminale, il y a de fortes chances pour que le compilo transforme ça en tant que.
C'était effectivement comme ça que je l'avais écrit initialement. Le problème de ce genre de code est que, pour éviter un test initial que tu ne feras qu'une fois (à savoir vérifier que t'appelles pas la fonction avec un élément nul) tu génères un appel récursif supplémentaire (avec toutes les contraintes qui y sont liées comme la sauvegarde du contexte, etc) et inutile (puisque t'appelles la fonction pour le NUL de la fin de liste).
Dans ce cas précis oui. Mais on parle de cas plus généraux dans lesquels la récursivité terminale n'a pas lieu d'être...
http://emmanuel-delahaye.developpez....s_chainees.htmC'est plus sûr si il y a des risques de débordement de pile avec la récursivité (trop grande profondeur).Citation:
Et quelle est la différences avec la manière récursive ?