Salut
Est il possible , par reflexion, si l'appel d 'une fonction a ete effectue par elle meme ?
mERCI !!
Salut
Est il possible , par reflexion, si l'appel d 'une fonction a ete effectue par elle meme ?
mERCI !!
Par réflexion je ne sais pas, je n'ai jamais utilisé encore, par contre il y a peut être moyen de s'en sortir avec la pile des appels.
Je en suis pas sûr d'avoir compris la question, j'ai l'impression qu'il manque un mot. Mais si tu veux savoir si une fonction est apellée par elle-même, le plus simple est peut etre de mettre un paramètre optionel que la fonction utiliserait pour témoigner la récursivité.
Genre un compteur incrémentant le nombre d'appel de la fonction lorsque celle-ci s'appelle.
Avec sauvegarde de l'ancienne valeur.
Ainsi tu pourrais faire en plus des stats le nombre de fois où elle s'appelle.![]()
tu peux savoir si la fonction a été appelée par elle meme en décortiquant la pile d'appels comme déjà énoncé
StackTrace est ton amis.
Malheureusement le mécanisme de stacktrace est lent, il est donc à proscrire dans du code "critique".
La reflexion te permettra d'exécuter la méthode mais pas de savoir comment et par qui elle a été appelée.
La solution peut consister à rendre ta méthode récursive en private.
Moi je fait comme cela. Mes méthodes récursives ne sont jamais directement appelées par le client, car on ne peut pas avoir confiance par défaut dans la valeur initiale fournie
Elles sont donc toujours privées, et l'initialisation de ma récursivité se fait dans la méthode publique appelée.
Ensuite je ne saurais que te déconseiller la récursivité, et ce pour de multiples raisons...
1. rendre la méthode itérative plutot que récursive va te faire gagner pas loin de 5% a 10% de vitesse.
2. tu ne surcharge pas la pile d'appel en dérécursivant ton algorithme. Il faut savoir que meme si c'est assez rare, la pile d'appel est limitée en terme de taille sous windows... ce n'est pas due à .NET c'est inhérent aux programmes windows. (les piles d'exécutions ne sont pas gérées de la meme facon sous windows et sous linux/unix)
+1 ...
Mais ton problème est peut être très difficile à rendre itératif ! Bien qu'il soit prouvé que tout algo récursif peut être rendu itératif et vice versa, c'est parfois bien dur...
Partager