辗转相除法求最大公约数

这个代码的问题出在哪儿啊?它咋不能交换m,n的值啊,而且一直在循环

#include
using namespace std;
void Swap(int m, int n)
{
    int temp = m;
    m = n;
    n = temp;
}
int main()
{
    int m, n, z;
    cout << "请输入两个整数:" << endl;
    cin >> m >> n;
    z = m % n;
    while (z != 0)
    {
        if (m >= n)
        {
            z = m % n;
            m = n;
            n = z;
        }
        else
        {
            Swap(m, n);
        }
    }
    cout << n;
    return n;
}

互换函数Swap(int m,int n)的参数是形参,在函数内部运算时,会额外创建另外的,独属于Swap函数的m和n变量(形参),作用域在Swap函数内部,函数执行完后就会清除,而不会影响main函数里的m和n的值(实参),所以main函数里的循环一直在执行Swap函数,而m和n的值在main函数里根本没有变化。将该函数的参数改成引用型就能解决了。如下

void Swap(int &m, int &n) 

或者用指针作为参数也能解决。
另外,最后输出的值应该是m,不是n。