Rumah >pembangunan bahagian belakang >C++ >Penjelasan terperinci tentang rekursi fungsi C++: analisis kerumitan rekursi

Penjelasan terperinci tentang rekursi fungsi C++: analisis kerumitan rekursi

王林
王林asal
2024-05-04 15:54:02510semak imbas

Rekursi ialah proses fungsi memanggil dirinya sendiri. Kerumitan masa rekursif boleh dianalisis dengan mengira bilangan panggilan rekursif, contohnya, fungsi faktorial ialah O(n^2), dan fungsi rekursif bagi sebutan ke-n bagi jujukan Fibonacci ialah O(φ^n), di mana φ ialah nisbah emas.

C++ 函数递归详解:递归的复杂度分析

Penjelasan terperinci tentang rekursi fungsi C++: analisis kerumitan rekursi

Apakah rekursi?

Rekursi ialah tingkah laku fungsi yang memanggil dirinya sendiri. Rekursi berlaku apabila fungsi memanggil dirinya sendiri.

Contoh rekursi

Berikut ialah fungsi rekursif yang mengira faktorial:

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

Analisis kerumitan rekursi

Kerumitan fungsi rekursif boleh dianalisis dengan mengira nombornya dengan mengira bilangannya.

Untuk fungsi faktorial:

  • Apabila n ialah 0, panggilnya secara rekursif sekali.
  • Apabila n ialah 1, panggilan rekursif dibuat 2 kali (1 panggilan kendiri, 1 panggilan ekor).
  • Apabila n ialah 2, panggilan rekursif dibuat 3 kali (1 panggilan kendiri, 2 panggilan ekor).

Secara analogi, apabila n ialah k, bilangan panggilan rekursif ialah k + 1.

Bilangan panggilan rekursif membentuk urutan aritmetik: 1, 2, 3, ..., k + 1, dan formula penjumlahannya ialah:

1 + 2 + 3 + ... + (k + 1) = (k + 1) * (k + 2) / 2

Oleh itu, kerumitan fungsi faktorial ialah O(n^2) .

Kes praktikal

Berikut ialah fungsi rekursif yang mengira sebutan ke-n bagi jujukan Fibonacci:

int fibonacci(int n) {
  if (n <= 1) {
    return 1;
  }
  return fibonacci(n - 1) + fibonacci(n - 2);
}

Bilangan panggilan rekursif berkaitan dengan nisbah emas, dan kerumitannya ialah O(φ^n), dengan φ ≈ 1.618 Nisbah emas.

Atas ialah kandungan terperinci Penjelasan terperinci tentang rekursi fungsi C++: analisis kerumitan 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