J'ai une fonction get_trees() qui fonctionne sur une structure arborescente complexe T et retourne deux structures arborescentes de composants A et B. La seule façon dont j'ai pu faire fonctionner ceci est de créer une nouvelle structure C avec des pointeurs vers a et B, qui est ensuite transmis en tant que paramètre à la fonction et est également une valeur de retour:retourner et utiliser plusieurs structures arborescentes dans une fonction récursive
typedef struct Composite {
itree *A;
itree *B;
} composite;
composite *get_trees(complextree *T, itree *A, itree *B, composite *C);
noeuds racines des arbres a & B sont initialisés dans une autre fonction :
itree *A = new_itree(0);
itree *B = new_itree(0);
A->n = T->a;
B->n = T->b;
composite *C;
C = get_trees(T, A, B, C);
ge t_trees() parcourt les branches de l'arbre complexe T, alloue et remplit les noeuds de A et B et s'appelle récursivement sur les sous-noeuds. Code simplifié:
//code for allocating subnodes of A and B
if (T->nodes != NULL){
for (i=0; i< T->nn; i++){
//code for computing p & q
C = get_trees(T->nodes[i], A->nodes[p], B->nodes[q]);
}
}
Le code fonctionne correctement. Cependant, il semble très laid.
(1) C n'a pas de signification intrinsèque et est utilisé pour permettre le retour de plusieurs valeurs. Y a-t-il une alternative? Quelque chose de la manière suivante:
(2) Est-il possible d'écrire la fonction récursive avec la signature suivante:
void get_trees(T, A, B);
Is semble que si je passe des noeuds de racine d'un & B en tant que paramètres et les sous-nœuds sont alloués dans la fonction récursive, alors il y a une chaîne continue de commande pour ainsi dire et l'arbre entier devrait être disponible quand l'appel récursif se termine. Cela n'a pas fonctionné pour moi, donc cela ne doit pas être autorisé. J'apprécierais que quelqu'un puisse expliquer pourquoi c'est le cas, ou si une solution plus élégante est possible ??
Merci et joyeuses fêtes. ~ RT
Merci pour la réponse instantanée. Cela semble évidemment beaucoup plus propre. Je ne suis toujours pas sûr, comment j'attacherais ** AOut avec * A, à chaque étape récursive? Pouvez-vous fournir une description concrète? Cela permettra de clarifier un tas d'hypothèses erronées de ma part. merci, RT – user151410
Je voudrais pouvoir vous aider, mais il n'est pas clair comment vous utilisez le composite maintenant, donc je ne sais pas comment le remplacer. 'C = get_trees (T-> nœuds [i], A-> nœuds [p], B-> nœuds [q]);' manque un argument, comment réinjecter la valeur de retour dans la fonction récursive? –
Ajouter une nouvelle "réponse" pour plus d'espace.RT – user151410