c# - 是否存在递归到迭代或反之亦然的算法?

标签 c# algorithm recursion iteration

是否存在具有最高效率输出和尾递归的递归到迭代或反之亦然的算法?

首选语言是 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/

相关文章:

c# - 我使用 Firebase 的统一登录不起作用

c# - 如何从 Facebook 注销或清除 WebAuthenticationBroker 上的 cookie?

c# - 从 C# 调用 Python 脚本 - 更改脚本的文件路径会导致程序无法运行

javascript - Google Apps 脚本.递归添加项目?

c++ - 这是无限递归UB吗?

c# - 将 JavaScript 对象转换为 C# 对象

python - 用python实现二进制搜索

java - java中的邻接矩阵,广度优先搜索

algorithm - 修改后的附近学校/邮局示例的贪婪算法方法

Javascript - 用于展平数组的递归/for 循环