Maison  >  Article  >  développement back-end  >  Les expressions lambda C++ prennent-elles en charge la récursivité ?

Les expressions lambda C++ prennent-elles en charge la récursivité ?

WBOY
WBOYoriginal
2024-04-17 21:06:01605parcourir

Oui, les expressions C++ Lambda peuvent prendre en charge la récursivité en utilisant std::function : utilisez std::function pour capturer une référence à une expression Lambda. Avec une référence capturée, une expression lambda peut s'appeler de manière récursive.

C++ lambda 表达式是否支持递归?

Récursion des expressions lambda en C++

Les expressions lambda sont une fonctionnalité puissante en C++ qui vous permet de définir des objets de fonction anonymes au moment de l'exécution. Généralement, les expressions lambda ne peuvent pas être récursives car elles ne peuvent pas capturer leurs propres références. Cependant, il existe une technique pour prendre en charge la récursivité des expressions lambda à l'aide de std :: function.

Utilisation de std::function

std::function est un objet fonction qui peut contenir une référence à n'importe quel objet appelable, y compris les expressions lambda. En utilisant std::function pour capturer une référence à une expression lambda, vous pouvez créer une expression lambda qui peut être appelée de manière récursive.

Exemple de code

L'exemple de code suivant montre comment utiliser std::function pour activer la récursion d'une expression lambda :

#include <functional>

int fibonacci(int n) {
  std::function<int(int)> fib = [&fib](int n) {
    if (n <= 1) {
      return n;
    }
    return fib(n - 1) + fib(n - 2);
  };

  return fib(n);
}

int main() {
  int result = fibonacci(5);
  std::cout << "Fibonacci of 5 is: " << result << "\n";
  return 0;
}

Dans cet exemple, une référence à l'expression lambda fib 捕获了对自身 fib. De cette façon, il peut s'appeler de manière récursive pour calculer les nombres de Fibonacci.

Remarque

Bien que vous puissiez utiliser la fonction std::pour prendre en charge la récursivité des expressions lambda, vous devez toujours faire attention aux éléments suivants lorsque vous utilisez la récursivité :

  • Assurez-vous que la condition de récursivité est clairement définie pour éviter une infinité récursivité.
  • La récursion profonde doit être utilisée avec prudence en raison d'un potentiel débordement de pile.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn