在最近的一次採訪中,我被問到一個問題,寫一個遞歸函數來反轉一個字符串,迭代版本是否比這個特定算法的遞歸函數更好。我不確定遞歸解決方案比迭代解決方案更糟糕/更好。任何人都可以幫我理解這個嗎?遞歸與迭代在C#
是不是下面的代碼是一個尾遞歸的?
public static string Reverse(string str)
{
return (str.Length <= 1 ? str : str[str.Length - 1]
+ Reverse(str.Substring(0, str.Length - 1)));
}
請看看[this] [1]是否回答你的問題。 [1]:http://stackoverflow.com/questions/159590/way-to-go-from-recursion-to-iteration – AksharRoop 2012-01-11 10:16:14
這不是尾遞歸。對於尾遞歸函數,最後調用的函數必須是函數本身。在這種情況下,所調用的最後一件事實際上是'+'操作。 – porges 2012-01-11 10:17:09
謝謝你指出這一點。 – blitzkriegz 2012-01-11 10:31:45