algorithm - 扩展欧几里得算法 - 是否有非递归版本?

标签 algorithm recursion

我实现了以下版本的扩展欧几里得算法:

long gcdex(const long& a, const long& b, long& x, long& y)
{
    if (a == 0) {
        x = 0; y = 1;
        return b;
    }
    
    long x1, y1;
    long d = gcdex(b % a, a, x1, y1);
    x = y1 - (b / a) * x1;
    y = x1;
    return d;
}

我不知道如何实现它的非递归版本,你能帮我吗?

最佳答案

任何递归算法都可以使用迭代和附加堆栈实现为非递归算法。但这仍然会导致某些算法的可读性大大降低,并且可能无法提高效率。

我喜欢你的算法版本 - 它简短且可读(不过也许你需要重命名一些变量),并且它为你提供了算法的最佳复杂性。

关于algorithm - 扩展欧几里得算法 - 是否有非递归版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22991075/

相关文章:

c++ - std::unique 是否使 vector 迭代器无效?

recursion - 在Ocaml列表中查找最大/最小编号

java - 如何使用递归方法找出数组中的奇数?

python - 在 Raspberry PI 上将 Pi 计算到数百万个位置

c++ - 寻找最快的可能路径

algorithm - 最小化一个点到一组点的最大曼哈顿距离

java - 如何找到与同一对象关联的最大对象数

multithreading - 可重用屏障算法

mysql - 如何在 SQL 中进行递归查询?

python - 当解释器循环本身是递归的时,蹦床的堆栈安全性