Convertir une fonction récursive non terminale en une fonction récursive terminale ?
	
	
		Salut,
J'essaye de réaliser une fonction qui cherche un noeud dans une arbre n-aire. Pour cela j'ai fait cette fonction récursive non terminale :
	Code:
	
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 
 |  
void nAry::trouverUnNoeud(int val)
{
  noeud* nt = NULL;
  noeud* noeudRecherche = trouverUnNoeudPrivate(val,pRacine,nt);
  if (noeudRecherche == NULL) cout<<"Noeud non trouvé.\n";
  else	cout<<"Trouvé..."<<noeudRecherche->val<<"\n";
}
 
nAry::noeud* nAry::trouverUnNoeudPrivate(int val,noeud* pNoeud, noeud* nt)
{
 if(pNoeud == NULL) return NULL;
  cout << pNoeud->val <<" "<<val<<"\n";
 //Si le noeud est trouvé :
  if (pNoeud->val == val) 
  {
    cout<<"+++"<<pNoeud->val<<"\n";
    nt = pNoeud;
    return pNoeud;//elle retourne le noeud.
 
  }
   if (!pNoeud->fils.empty())
    for (list<noeud*>::iterator it = pNoeud->fils.begin() ; it != pNoeud->fils.end() ; ++it)
        //appel récursif.
       nt = trouverUnNoeudPrivate(val,*it,nt);
   return nt;
} | 
 Mais cette fonction est non terminal, parce que même si elle trouve le noeud, elle dépile la pile des appels récursifs.
dans le main, j'appelle avec :
	Code:
	
nAryTree.trouverUnNoeud(2);