Rumah >pembangunan bahagian belakang >C++ >Bolehkah Fungsi Rekursif Disebaris?
Sebaris Fungsi Rekursif
Adalah salah tanggapan umum bahawa fungsi rekursif tidak boleh sebaris. Walau bagaimanapun, pengkompil sememangnya boleh melakukan fungsi rekursif sebaris, walaupun dengan pertimbangan tertentu.
Kelayakan Sebaris lwn. Pengoptimuman Pengkompil
Penentukan sebaris pada fungsi hanyalah petunjuk kepada penyusun. Pengkompil mempunyai keputusan akhir sama ada untuk menyelaraskan fungsi atau tidak, tanpa mengira kelayakan sebaris.
Keputusan Sebaris Penyusun
Pengkompil memutuskan sama ada untuk menyelaraskan fungsi berdasarkan atas faktor seperti:
Contoh Pengoptimuman Inlining
Pertimbangkan fungsi faktorial rekursif berikut:
<code class="cpp">inline int factorial(int n) { if (n <= 1) return 1; else return n * factorial(n - 1); }</code>
Pengkompil pengoptimuman berpotensi menyelaraskan fungsi ini ke tahap tertentu, seperti yang dilihat dalam kod dioptimumkan berikut:
<code class="cpp">int factorial(int n) { if (n <= 1) return 1; else { int n2 = n - 1; if (n2 <= 1) return n * 1; else { int n3 = n2 - 1; if (n3 <= 1) return n * n2 * 1; else return n * n2 * n3 * factorial(n3 - 1); } } }</code>
Dalam kes ini, pengkompil telah membuka gulungan fungsi faktorial tiga kali, dengan berkesan menyelaraskan sebahagian daripada panggilan rekursif.
Atas ialah kandungan terperinci Bolehkah Fungsi Rekursif Disebaris?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!