Rumah > pembangunan bahagian belakang > C++ > Adakah ungkapan lambda C++ menyokong rekursi?

Adakah ungkapan lambda C++ menyokong rekursi?

WBOY
Lepaskan: 2024-04-17 21:06:01
asal
634 orang telah melayarinya

Ya, ungkapan Lambda C++ boleh menyokong rekursi dengan menggunakan std::function: Gunakan std::function untuk menangkap rujukan kepada ungkapan Lambda. Dengan rujukan yang ditangkap, ungkapan lambda boleh memanggil dirinya secara rekursif.

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

Rekursi ungkapan lambda dalam C++

Ekspresi Lambda ialah ciri berkuasa dalam C++ yang membolehkan anda mentakrifkan objek fungsi tanpa nama pada masa jalan. Umumnya, ungkapan lambda tidak boleh rekursif kerana ia tidak dapat menangkap rujukannya sendiri. Walau bagaimanapun, terdapat teknik untuk menyokong pengulangan ungkapan lambda menggunakan std::function.

Menggunakan std::function

std::function ialah objek fungsi yang boleh memegang rujukan kepada mana-mana objek boleh panggil, termasuk ungkapan lambda. Dengan menggunakan std::function untuk menangkap rujukan kepada ungkapan lambda, anda boleh mencipta ungkapan lambda yang boleh dipanggil secara rekursif.

Contoh Kod

Contoh kod berikut menunjukkan cara menggunakan std::fungsi untuk mendayakan pengulangan ungkapan 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;
}
Salin selepas log masuk

Dalam contoh ini, rujukan kepada ungkapan lambda fib 捕获了对自身 fib. Dengan cara ini ia boleh memanggil dirinya secara rekursif untuk mengira nombor Fibonacci. . rekursi.

Rekursi dalam harus digunakan dengan berhati-hati kerana kemungkinan limpahan tindanan.

Atas ialah kandungan terperinci Adakah ungkapan lambda C++ menyokong rekursi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan