有沒有更好地使用遞歸而不是任何其他方法的任務?遞歸我指的是:遞歸的實際用途
int factorial(int value)
{
if (value == 0)
{
return 1;
} else
{
return value * factorial(value - 1);
}
}
有沒有更好地使用遞歸而不是任何其他方法的任務?遞歸我指的是:遞歸的實際用途
int factorial(int value)
{
if (value == 0)
{
return 1;
} else
{
return value * factorial(value - 1);
}
}
嗯,有幾個原因我可以想到。
遞歸通常比純粹的迭代解決方案更容易理解。例如,在recursive-descent parsers的情況下。
在支持tail call optimization的編譯器中,迭代使用遞歸沒有額外的開銷,並且通常會導致更少的代碼行(並因此導致更少的錯誤)。
首先你的例子沒有任何意義。 你寫它的方式只會導致無止境的循環而沒有任何結果。
一個「真正」的功能會更是這樣的:
int factorial(int value)
{
if (value == 0)
return 1;
else
return value * factorial(value - 1);
}
當然你可以完成一個循環同樣的事(甚至可能會更好,尤其是當函數調用招致的懲罰堆棧幀)。通常,當人們使用遞歸時,他們這樣做是因爲它更容易閱讀(對於某些問題域)。
經典的迷宮問題就是一個使用它的例子。但在任何可以使用它的地方,您也可以使用非遞歸解決方案。詢問「更好」是旁觀者眼中的相對術語。一個人的噪音是另一個人的信號。所以沒有比這更好或更壞的東西。只會對你更好或更糟,並解決一個特定的問題。 –