2016-02-08 75 views
0

有沒有更好地使用遞歸而不是任何其他方法的任務?遞歸我指的是:遞歸的實際用途

int factorial(int value) 
{ 
    if (value == 0) 
    { 
    return 1; 
    } else 
    { 
    return value * factorial(value - 1); 
    } 
} 
+1

經典的迷宮問題就是一個使用它的例子。但在任何可以使用它的地方,您也可以使用非遞歸解決方案。詢問「更好」是旁觀者眼中的相對術語。一個人的噪音是另一個人的信號。所以沒有比這更好或更壞的東西。只會對你更好或更糟,並解決一個特定的問題。 –

回答

3

嗯,有幾個原因我可以想到。

  • 遞歸通常比純粹的迭代解決方案更容易理解。例如,在recursive-descent parsers的情況下。

  • 在支持tail call optimization的編譯器中,迭代使用遞歸沒有額外的開銷,並且通常會導致更少的代碼行(並因此導致更少的錯誤)。

1

首先你的例子沒有任何意義。 你寫它的方式只會導致無止境的循環而沒有任何結果。

一個「真正」的功能會更是這樣的:

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

當然你可以完成一個循環同樣的事(甚至可能會更好,尤其是當函數調用招致的懲罰堆棧幀)。通常,當人們使用遞歸時,他們這樣做是因爲它更容易閱讀(對於某些問題域)。