2010-11-06 4 views
-1

Possible en double:
Stop recursion after a certain amount of stepscomptant le nombre de petits-enfants dans un arbre

Quel serait le problème avec cette méthode ici pour compter le nombre de petits-enfants dans un arbre, mais pas de grands petits-enfants ?

(enfant1 est laissé enfant et enfant2 est enfant droit) En outre, cette méthode ne doit pas prendre de paramètres. Si vous offrez une solution de rechange, s'il vous plaît aussi me dire ce qui est erroné avec ma solution actuelle ..

public int countGrandChildren() // but not greatGrandChildren 
    { 
     int count=0; 
     int depth=1; 
     if (depth<4){ 
      if (child1!=null){ 
       count+=child1.countGrandChildren(); 
       depth++; 
       if (depth==3) 
        count++; 
      } 
      if (child2!=null){ 
       count+=child2.countGrandChildren(); 
       depth++; 
       if (depth==3) 
        count++;  
      } 
     } 
     return count; 

    } 
+0

S'il vous plaît ne pas créer une nouvelle question qui est essentiellement le même que votre vieille question ... Eh bien –

+0

ne me aidait à l'autre question – Snowman

+0

Toutes les réponses possibles (raisonnables) ont été données à la question précédente. Poser à nouveau la question ne changera pas ce fait! –

Répondre

0

Comment cela fonctionnerait si vous ne passez pas la profondeur à chaque appel récursif? La profondeur est toujours 1 au début et ensuite vous pouvez l'incrémenter. mais il ne sera jamais == 3.

+0

Pourquoi est-il nécessaire de ne pas avoir de paramètre pour la fonction? Est-ce que la mission a dit cela? –

+0

Mais la profondeur est incrémentée .. – Snowman

+0

Oui aucun paramètre – Snowman

0

Comme déjà discuté au your previous question, vous ne passez pas de paramètres entre les appels récursifs successifs, alors comment pourraient-ils se terminer?

int depth = 1; if (depth < 4) ... sera toujours être le cas!

Les solutions sont des variations sur l'une des possibilités suivantes:

  • passer un depth (ou équivalent) paramètre récursive
  • maintenir le nombre ailleurs (mauvais)
  • attribuons à chaque instance de la classe A myDepth variable membre à la construction en fonction de sa position dans l'arborescence (ce qui sera pénible si vous avez besoin de réorganiser des éléments dans l'arbre)
+0

mais j'augmente la profondeur chaque fois que je vais dans un niveau plus profond – Snowman

+0

@prime: 'depth' est local à chaque appel de' countGreatGrandchildren() ', et vous le réglez sur 1 au début de la fonction. C'est une variable 'profondeur' différente dans chaque appel (et elle est toujours initialisée à 1). – eldarerathis

+0

@fprime: Non, vous ne l'êtes pas. Vous avez 'depth' comme variable locale, donc il est réinitialisé à 1 chaque fois que vous appelez la méthode. –

0

Votre meilleure option est de passer la variable de profondeur en tant que paramètre de la fonction ici est un exemple plus simple qui calcule la factorielle d'un nombre en appelant la fonction récursivement mais en soustrayant 1 de l'argument passé à chaque fois.

public int calcFactorial(int facnum){ 
    int res; 
    if (facnum==1){ 
     res=1; 
     } 
    else { 
     res=facnum*calcFactorial(facnum-1); 
     }   

} 
Questions connexes