簡體   English   中英

這不是尾遞歸嗎? (堆棧溢出錯誤)

[英]Is this not tail recursive? (stack overflow error)

這是我編寫的一個小函數,用於檢查整數是否為質數:

int prime(int x, int y = 2)
{
    if(y <= x/2)
    {
        if((x % y) == 0)
            return 0;
    }
    else
        return 1;

    return prime(x, ++y);
}

現在,我使用Visual Studio 2012對其進行編譯,如果我給它一個較大的值(如105943),則會發生堆棧溢出錯誤,並且代碼會中斷。 現在,此函數不是尾遞歸嗎? 如果是這樣,則不應為遞歸調用維護堆棧,並且不應發生溢出?

我到底要來什么?

它是一個尾遞歸函數,但不需要任何編譯器將尾遞歸優化為循環。 如果您將優化級別設置得足夠高,則很有可能會這樣做。 但是,僅此而已。

LISP(和派生語言)是我所知道的僅有尾遞歸實際上是實現要求的地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM