Rumah > pembangunan bahagian belakang > C++ > Bilakah Fungsi Rekursif Boleh Disebaris?

Bilakah Fungsi Rekursif Boleh Disebaris?

Mary-Kate Olsen
Lepaskan: 2024-10-25 09:20:28
asal
550 orang telah melayarinya

When Can a Recursive Function Be Inlined?

Bolehkah Fungsi Rekursif Dioptimumkan untuk Sebaris?

Dalam pengaturcaraan, fungsi sebaris ialah fungsi yang disertakan secara langsung dalam kod sumber yang memanggilnya. Proses ini meningkatkan kecekapan dengan menghapuskan overhed untuk memanggil fungsi luaran. Walau bagaimanapun, sesetengah pembangun mempersoalkan sama ada fungsi rekursif boleh dioptimumkan untuk sebaris.

Pertimbangkan coretan kod berikut:

<code class="c++">inline int factorial(int n)
{
    if(!n) return 1;
    else return n*factorial(n-1);
}</code>
Salin selepas log masuk

Timbul kebimbangan bahawa pelaksanaan rekursif ini boleh membawa kepada "penyusunan tak terhingga" jika tidak dikendalikan dengan betul oleh pengkompil. Persoalannya menjadi: Bagaimanakah pengkompil membuat keputusan untuk menyelaraskan fungsi, terutamanya apabila ia rekursif?

Jawapannya terletak pada sifat spesifikasi sebaris. Ia hanyalah petunjuk kepada pengkompil. Penyusun mempunyai budi bicara untuk mengabaikan cadangan ini atau malah menyelaraskan fungsi bukan sebaris. Walau bagaimanapun, pengkompil boleh menyelaraskan fungsi rekursif.

Pengkompil boleh melaksanakan pengoptimuman ini dengan menetapkan had kedalaman rekursi yang akan dibuka. Sebagai contoh, pengkompil yang mengoptimumkan boleh mengubah kod yang disediakan kepada yang berikut:

<code class="c++">int factorial(int n)
{
    if (n <= 1)
    {
        return 1;
    }
    else
    {
        return n * factorial(n - 1);
    }
}

int f(int x)
{
    if (x <= 1)
    {
        return 1;
    }
    else
    {
        int x2 = x - 1;
        if (x2 <= 1)
        {
            return x * 1;
        }
        else
        {
            int x3 = x2 - 1;
            if (x3 <= 1)
            {
                return x * x2 * 1;
            }
            else
            {
                return x * x2 * x3 * factorial(x3 - 1);
            }
        }
    }
}</code>
Salin selepas log masuk

Dalam contoh ini, fungsi itu pada dasarnya diselaraskan tiga kali. Pengoptimuman ini disokong oleh beberapa penyusun, seperti MSVC , yang membenarkan penyesuaian tahap sebaris untuk fungsi rekursif.

Atas ialah kandungan terperinci Bilakah Fungsi Rekursif Boleh Disebaris?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan