Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Rekursi fungsi C++ dijelaskan: alternatif kepada rekursi

Rekursi fungsi C++ dijelaskan: alternatif kepada rekursi

WBOY
WBOYasal
2024-05-01 16:54:01963semak imbas

Rekursi ialah teknik di mana fungsi memanggil dirinya sendiri, tetapi mempunyai kelemahan limpahan tindanan dan ketidakcekapan. Alternatif termasuk: pengoptimuman rekursif ekor, di mana pengkompil mengoptimumkan panggilan rekursif ke dalam gelung, yang menggunakan gelung dan bukannya rekursi, yang membolehkan pelaksanaan dijeda dan disambung semula, mensimulasikan tingkah laku rekursif.

C++ 函数递归详解:递归的替代方法

C++ Fungsi Rekursi Penjelasan Terperinci: Alternatif kepada Rekursi

Apakah rekursi?

Rekursi ialah teknik pengaturcaraan yang membolehkan sesuatu fungsi memanggil dirinya sendiri. Ini boleh digunakan untuk menyelesaikan masalah di mana tugas yang sama perlu dilakukan berulang kali. .

Ketidakcekapan: Panggilan rekursif biasanya tidak cekap kerana ia memerlukan penciptaan bingkai tindanan baharu untuk setiap panggilan.

    Alternatif kepada rekursi
  • Untuk pertimbangan kecekapan dan kebolehpercayaan, kaedah berikut boleh digunakan sebagai ganti rekursi:
  • 1 Pengoptimuman rekursi ekor
  • pengoptimuman pengoptimuman pengoptimuman (TC
) pengoptimuman tertentu. Pengoptimuman beberapa bentuk panggilan rekursif. Ia menukarkan panggilan rekursif kepada gelung berulang, dengan itu menghapuskan penggunaan ruang tindanan.

2. Lelaran

Lelaran ialah cara alternatif untuk menyelesaikan masalah rekursif. Ia menggunakan gelung dan bukannya panggilan rekursif.

3. Coroutines

Coroutine ialah benang ringan yang membolehkan pelaksanaan dijeda dan disambung semula dalam fungsi. Ia boleh digunakan untuk mensimulasikan tingkah laku rekursif tanpa menyebabkan limpahan tindanan.

Kes praktikal

Pertimbangkan masalah rekursi klasik pengiraan nombor Fibonacci. Berikut ialah alternatif yang dilaksanakan menggunakan lelaran, pengoptimuman ekor-rekursif dan coroutine:

Lelaran:

int fib_iterative(int n) {
  int a = 0, b = 1, c;
  for (int i = 0; i < n; i++) {
    c = a + b;
    a = b;
    b = c;
  }
  return b;
}

Pengoptimuman ekor-rekursif:

int fib_tail_recursive(int n, int a, int b) {
  if (n == 0) {
    return a;
  }
  return fib_tail_recursive(n - 1, b, a + b);
}

int fib_tail_recursive_wrapper(int n) {
  return fib_tail_recursive(n, 0, 1);
}

tawaran lebih ramai jururawat

Pekerja alternatif: penyelesaian yang cekap tanpa timbunan limpahan atau ketidakcekapan.

Atas ialah kandungan terperinci Rekursi fungsi C++ dijelaskan: alternatif kepada rekursi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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