是否存在具有最高效率输出和尾递归的递归到迭代或反之亦然的算法?
首选语言是 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;
}
最佳答案
是的,总是可以从递归算法创建迭代版本。我不知道 C# 是否存在程序/代码重写器可以做到这一点。这种技术已经得到了很好的研究,您可以找到像 From recursion to iteration: what are the optimizations? (pdf file) 这样的一般引用资料。 .
最坏的情况是简单地“模拟”堆上的堆栈以保存函数的状态以供将来使用。最简单的情况可能是尾递归到循环。关于这个主题有很多文章。
另一方面,从通用迭代算法创建递归版本的研究较少,但它确实存在,
关于c# - 是否存在递归到迭代或反之亦然的算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12449775/