int gcd(n,m)
{
if (n%m ==0) return m;
n = n%m;
return gcd(m,n);
}
我解决了这个问题,得到的结果是:
T(n, m) = 1 + T(m, n%m) if n > m
= 1 + T(m, n) if n < m
= m if n%m == 0
我对如何进一步进行以获得最终结果感到困惑。请帮助我解决这个问题。
int gcd(n,m)
{
if (n%m ==0) return m;
n = n%m;
return gcd(m,n);
}
T(n, m) = 1 + T(m, n%m) if n > m
= 1 + T(m, n) if n < m
= m if n%m == 0
mcdowella给出了完美的答案。
为了直观地解释,您可以这样想:
如果n>=m,则n mod m<n/2;
可以表示为:
如果m<n/2,则: n mod m<m<n/2
如果m>n/2,则:n mod m=n-m<n/2
因此,您实际上是将较大的输入减半,在两个调用中,两个参数都将被减半。