2014-07-02 4 views
0

la déclaration de retour de la méthode suivante m'a déconcerté:déclaration de retour récursive avec || dans ce

public static boolean groupSum(int start, int[] nums, int target, int max) { 

     if (start >= nums.length) { return target == 0; } 
     // can't use max value 
     else if (nums[start] == max) { 
      return groupSum(start + 1, nums, target, max); 
     } 
     else { 
      return groupSum(start + 1, nums, target - nums[start], max) || 
        groupSum(start + 1, nums, target, max); 
     } 
     } 

si vous remarquez, la déclaration de retour a une || «ou», et je suis confus quant à savoir quelle clause est renvoyée ici ... si vous pouviez fournir une explication sur la façon dont cela fonctionne, ce serait formidable.

+0

Une déclaration 'return' _returns_ une valeur, et non une clause. Le '||' est un opérateur qui est appliqué à deux opérandes et produit une valeur. –

+0

alors quelle valeur est retournée? la valeur sur le côté gauche ou le côté droit? et sur quoi est-il basé? – user3730244

+0

@ user3730244 - Le résultat est une comparaison des deux opérandes, pas de l'un des opérandes – kolossus

Répondre

2

L'opérateur || ne choisit pas l'expression à renvoyer, il exécute un OU logique entre les deux expressions et, après cela, return renvoie le résultat.

La déclaration return retournera true si l'une des expressions est true, et il retournera false si les deux expressions sont false.

+0

@RichardTingle Signifie une chose, tapé une autre. Corrigée. – rgettman

4

Étant donné que || est un opérateur court appelé curcuit, la première expression est évaluée et si, et seulement si elle est évaluée comme vraie, true est retournée immédiatement, sans évaluer la seconde. si elle échoue, la seconde est évaluée et son résultat est renvoyé.

Donc, si vous avez

a() || b() 

et un vrai b Equivaut à() n'est pas évalué

+0

que se passe-t-il si une dose n'évalue pas vrai, et que b? – user3730244

+0

@ user3730244 Ensuite, vous obtenez 'false || faux ». Qu'est-ce que ça veut dire? – Justin

+0

je n'ai aucune idée de ce que faux || false signifie ... la méthode se bloque-t-elle? – user3730244