【发布时间】:2012-09-16 19:02:15
【问题描述】:
是否存在具有最高效率输出和尾递归的迭代或反之递归算法?
首选语言是 C#。
例如:输入这个算法得到下一个简单的函数:
public static ulong Factorial(ulong n)
{
return n == 0 ? 1 : n * Factorial(n - 1);
}
处理后返回如下:
public static ulong Factorial(ulong n)
{
ulong result = 1;
for (ulong i = 1; i <= n; i++)
result = result * i;
return result;
}
【问题讨论】:
-
您是否需要一个代码转换器,它将特定语言的递归算法作为输入并返回该语言的迭代算法?
-
@KvanTT:这与您要使用的语言域严格相关。顺便说一句,与算法没有任何关系。如果我正确理解了这个问题,这就是代码的转换,保持它的语义。不要认为 CS 中还存在这样的工具。
-
@Michael Petrotta,是的。有很多描述如何手动转换它,但没有解释如何通过算法进行转换。为此,必须在开始时使用解析器。
-
有一个从递归到迭代的简单重写,使用显式堆栈。但是您不能像上面的示例那样轻松地将一种算法重写为完全不同的算法。它可能适用于某些特殊情况,但可能不适用于一般情况。
-
关于手动转换代码的算法,请查看how to rewrite a recursive method by using a stack?
标签: c# algorithm recursion iteration