Heim  >  Artikel  >  Backend-Entwicklung  >  Unterstützen C++-Lambda-Ausdrücke die Rekursion?

Unterstützen C++-Lambda-Ausdrücke die Rekursion?

WBOY
WBOYOriginal
2024-04-17 21:06:01529Durchsuche

Ja, C++-Lambda-Ausdrücke können die Rekursion mithilfe von std::function unterstützen: Verwenden Sie std::function, um einen Verweis auf einen Lambda-Ausdruck zu erfassen. Mit einer erfassten Referenz kann sich ein Lambda-Ausdruck rekursiv selbst aufrufen.

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

Rekursion von Lambda-Ausdrücken in C++

Lambda-Ausdrücke sind eine leistungsstarke Funktion in C++, mit der Sie anonyme Funktionsobjekte zur Laufzeit definieren können. Im Allgemeinen können Lambda-Ausdrücke nicht rekursiv sein, da sie ihre eigenen Referenzen nicht erfassen können. Es gibt jedoch eine Technik zur Unterstützung der Rekursion von Lambda-Ausdrücken mithilfe von std::function.

Verwenden von std::function

std::function ist ein Funktionsobjekt, das einen Verweis auf jedes aufrufbare Objekt, einschließlich Lambda-Ausdrücke, enthalten kann. Durch die Verwendung von std::function zum Erfassen eines Verweises auf einen Lambda-Ausdruck können Sie einen Lambda-Ausdruck erstellen, der rekursiv aufgerufen werden kann.

Codebeispiel

Das folgende Codebeispiel zeigt, wie man std::function verwendet, um die Rekursion eines Lambda-Ausdrucks zu ermöglichen:

#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;
}

In diesem Beispiel ein Verweis auf den Lambda-Ausdruck fib 捕获了对自身 fib. Auf diese Weise kann es sich selbst rekursiv aufrufen, um Fibonacci-Zahlen zu berechnen.

Hinweis

Obwohl Sie std::function verwenden können, um die Rekursion von Lambda-Ausdrücken zu unterstützen, müssen Sie bei der Verwendung der Rekursion dennoch auf die folgenden Dinge achten:

  • Stellen Sie sicher, dass die Rekursionsbedingung klar definiert ist, um eine Unendlichkeit zu verhindern Rekursion.
  • Tiefenrekursion sollte aufgrund eines möglichen Stapelüberlaufs mit Vorsicht verwendet werden.

Das obige ist der detaillierte Inhalt vonUnterstützen C++-Lambda-Ausdrücke die Rekursion?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn