-1
votes

Quelle est la fonction d'emballage et comment l'utiliser?

Pour mes devoirs, je dois utiliser une fonction appelée wrapper fonction pour valider le paramètre pour une fonction récursive, que je ne comprends pas ce que cela signifie. Tout ce que je comprends de la fonction wrapper est qu'il ne fait que s'il ne fait que s'enroulent autour d'une fonction, par exemple: xxx

Je ne sais même pas si le code ci-dessus est la bonne implémentation de Wrapper, mais je sais que cela fait Rien pour la fonction récursive mais juste la redondance.

Comment suis-je censé utiliser la fonction wrapper pour valider le paramètre? Ma fonction récursive a un cas de base qu'il atteindra sans l'aide de Wrapper.


6 commentaires

"Valider le paramètre" signifie littéralement que vérifiez si le paramètre est valide pour la fonction récursive, la fonction récursive réelle peut donc ignorer une telle étape.


Ils vous donnent des devoirs sans expliquer ce que c'est?


@ MT756 Dans mes devoirs, on m'a demandé de faire une manipulation des exceptions, ce qui me fait que je dois valider la contribution, puis on m'a demandé de faire une fonction d'emballage aussi, ce que je ne comprends pas.


@Thegnoldy Ouais, toute la diapositive de conférence a une demi-page de la glissière PowerPoint sur Wrapper.


Ensuite, effectuez la manipulation d'exception dans la fonction Wrapper (une vérification d'une fois), vous n'avez donc pas besoin de le faire dans la fonction récursive (un chèque qui se produit chaque appel récursif).


@ MT756 Je vois, merci beaucoup!


4 Réponses :


3
votes

Vous êtes dans la bonne direction.

Avant d'appeler la méthode récursive existante, vous devez valider le paramètre et prendre quelques actions em> si le paramètre est invalide p>

vous n'a pas donné les détails sur quoi valider. p>

Exemple: em> si le paramètre n code> doit être compris entre 1 et 10, vous pouvez ajouter un si em> vérifier. VALIDATION P>

if (n < 0 || n > 10) {
    throw new IllegalArgumentException("The parameter value must be between 1 and 10 (inclusive)");
}


3 commentaires

Je vois, merci pour la réponse. Hors de curiosité, la fonction Wrapper améliore-t-elle les performances de la fonction récursive ?? ou il suffit de fournir un endroit pour la validation? Et quand sera-t-il une bonne idée d'utiliser une fonction d'emballage? Parce que je peux simplement ajouter la validation à l'intérieur de la fonction de récursion elle-même et fonctionne toujours comme prévu.


@James La fonction Wrapper signifie que l'argument n'est validé qu'une fois que chaque appel récursif.


En outre, vous pouvez créer différentes fonctions de wrapper pouvant faire différentes choses tout en ayant la logique de base séparément.



0
votes

De mes recherches rapides sur le sujet, il semble que l'objectif soit d'avoir une fonction valider l'entiers avant d'appeler la fonction récursive pour éviter les erreurs. Par exemple, si j'écris une fonction récursive pour calculer la factorielle d'un entier, je voudrais m'assurer que l'entier est positif ou zéro avant d'appeler ma méthode.

public int factorial(int n)
{
    if(n == 0)
    {
         return 1;
    }
    return n * factorial(n-1);
}

public int factorialWrapper(int n)
{
    if(n < 0)
    {
        return 0;
    }
    return factorial(n);
}


0 commentaires

3
votes

Eh bien, une fonction d'emballage servirait à des fins (sinon, il n'y aurait aucune raison d'exister).

Un tel objectif pourrait être de valider d'abord l'entrée avant d'appeler la fonction récursive réelle (comme dans votre exemple), par exemple. Comme ceci: p>

private static void recursiveQS(int[] array, int left, int right) {
  //actual implementation here
}

//that's what the user would call
public static void quickSort(int[] array) {
   recursiveQS(array, 0, array.length);
}


2 commentaires

Je vois, donc avoir une fonction wrapper améliorer la performance de toute façon?


@Jameswong Dans de nombreux cas, qui améliorerait les performances, même si vous ne le remarqueriez probablement pas dans de nombreux cas ou cela n'aurait pas d'importance. L'amélioration des performances résulterait de moins de code exécuté (surtout si la validation serait complexe), mais il y a également des coûts impliqués dans l'appel à une autre fonction (qui, dans la plupart des cas, peut être négligé).



0
votes

Un wrapper pour une fonction récursive n'est rien de plus qu'une fonction qui a la responsabilité d'appeler une fonction récursive. Pourquoi il est utilisé:
1) Pour fournir à l'utilisateur une manière conviviale d'utiliser la fonction récursive (car les paramètres d'une fonction récursive peuvent parfois être parfois cryptiques pour l'utilisateur et ils ont des valeurs par défaut qui rendent la fonction fonctionne le plus de temps)
2) pour la validation.

L'exemple suivant affiche toutes les combinaisons possibles de {0, 1, 2, 3} Dans une longueur de 4. La fonction Backtracking () est une enveloppe pour retour (int)

J'ai écrit le code suivant en C ++, si vous voulez le traduire en java juste Remplacez les deux fonctions avec des fonctions statiques dans la classe principale Java, remplacez COUT avec System.Ot.println (); , supprimez le #include Directive et `à l'aide de l'espace de noms std; et cela fonctionnera; xxx


0 commentaires