2009-07-19 9 views
2

Tail méthode récursive à plusieurs 2 numérosméthode récursive de queue à plusieurs 2 numéros

public static int Multiply2(int x, int y) 
{ 
    return MulTail(x, y, x); 
} 

public static int MulTail(int x, int y, int result) 
{ 
    if (y == 0 || x == 0) 
     return 0; 
    if (y == 1) 
     return result; 

    return MulTail(x, y - 1, result+x); 

} 

Changé la mise en œuvre pour tenir compte des nombres négatifs

public static int Multiply2(int x, int y) 
     { 
      if ((y < 0 && x > 0) || (x < 0 && y < 0)) 
      { 
       y = y - y - y; 
       x = x - x - x; 
      } 


      return MulTail(x, y, x); 
     } 

     public static int MulTail(int x, int y, int result) 
     { 
      if (y == 0 || x == 0) 
       return 0; 
      if (y == 1) 
       return result; 

      return MulTail(x, y - 1, result+x); 

     } 
+0

Pouvons-nous améliorer cela? – Learner

+1

pourquoi quelqu'un dans leur esprit utiliser la récursivité pour multiplier deux nombres? –

+0

Ceci est juste un exercice d'apprentissage .. – Learner

Répondre

0

Vous pouvez l'améliorer en déplaçant le zéro vérifier dans Multiply2 , donc c'est seulement vérifié une fois.

Ou vous pouvez simplement utiliser votre intégré dans la langue opération de multiplication: P

Il semble aussi que vous tomberez sur une boucle infinie pour les valeurs négatives de y, donc si y est négatif et x est positif, vous pourrait échanger les signes; si elles sont toutes deux négatives, faites-les toutes deux positives.

1

Une méthode de multiplication utilisant uniquement l'addition, la soustraction et le doublement est appelée Ancient Egyptian Multiplication. Cette méthode est plus efficace que ce que vous avez proposé et peut être formulée dans une implémentation récursive.

+1

Nécessite la division par deux, ce que je supposais que nous n'avions pas. –