Algorithm 此算法中的递归调用数

Algorithm 此算法中的递归调用数,algorithm,recursion,Algorithm,Recursion,我有下面的C代码。我想知道这个函数有多少个递归调用 int gcd(n,m) { if (n%m ==0) return m; n = n%m; return gcd(m,n); } 答案是O(logn)。在我看来,它应该是O(n)。请解释它是怎样的O(logn) 提前谢谢。你为什么认为应该是O(n)?你有没有试过写出一些函数调用的所有调用(以便更直观地了解它是如何工作的)?@Dukeling好的,对不起,我没有试过,可以。我已经编辑了这个问题。请注意,gcd中的通

我有下面的C代码。我想知道这个函数有多少个递归调用

int gcd(n,m)
{ 
    if (n%m ==0) return m; 
    n = n%m;
    return gcd(m,n);
}
答案是
O(logn)
。在我看来,它应该是
O(n)
。请解释它是怎样的
O(logn)


提前谢谢。

你为什么认为应该是O(n)?你有没有试过写出一些函数调用的所有调用(以便更直观地了解它是如何工作的)?@Dukeling好的,对不起,我没有试过,可以。我已经编辑了这个问题。请注意,
gcd
中的通话次数平均为
log(n)
。在某些情况下,函数不进行递归调用(例如,如果
m
除以
n
),则调用次数不等于n,而是等于log(n)。这意味着,如果gcd(n,m)执行X次调用,gcd(n^2,m)将执行2次调用(大致如此,但复杂性是您应该研究的问题)。@IvayloStrandjev和@Fabinout感谢您的支持。我理解你的观点。然而,我实际上在计算你看到的答案时遇到了困难。我不知道怎么做。例如,如果我得到这样一个算法-
intdosomething(intn){if(n