Fonction récursive : compter le nombre d'appels
Bonjour a tous :
j'ai un petit soucis, à savoir je veux compter le nombre d'appels d'une fonction récursive dans une application déployée.
pour l'instant dans mon script je me débrouille avec profile, mais celui-ci n'est pas supporté par la compilation, ce qui est logique me direz-vous
Bon je peux pas montrer mon code, mais pour l'exemple prenons ceci qui se rapproche de ce que je fais : une fonction qui calcule le nombre de partitions d'un entier naturel en au plus q parties (pêchée sur l'ami wikipedia) : http://fr.wikipedia.org/wiki/Algorithme_r%C3%A9cursif.
en matlab, ca donne ça :
Code:
1 2 3 4 5 6 7 8 9 10 11
| function nb = d(p, q)
if p == 0
nb = 1;
elseif q == 0
nb = 0;
elseif q > p
nb = d(p, p);
else
nb = d(p-q, q) + d(p, q-1);
end
end |
pour essayer de "compter" le nombre d'appels, j'ai essayé d'utiliser une variable globale et j'ai fait ça :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| function [nb, n_tot] = d(p, q)
global n_iter
if isempty(n_iter)
n_iter = 0;
end
n_iter = n_iter+1;
if p == 0
nb = 1;
elseif q == 0
nb = 0;
elseif q > p
nb = d(p, p);
else
nb = d(p-q, q) + d(p, q-1);
end
n_tot = n_iter;
end |
seulement, les variables globales c'est pas forcement ce que je préfère, en effet me connaissant je vais forcément me planter quelque part dans une initialisation ou un truc du genre.. et je me demandais si quelqu'un connaissait une alternative?