对如下代码实现的欧几里得算法(辗转相除法),执行 gcd(48, 18) 得到的调用序列为( )。
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}辗转相除法求最大公约数:gcd(a,b) = gcd(b, a%b),当b=0时返回a。时间复杂度O(log min(a,b))。
辗转相除法中gcd(a,b)和gcd(b,a)结果相同。注意a和b的顺序不影响结果。
【考点】递归|辗转相除法|取模运算
GESP 五级(递归与函数模块)典型题型。命题人放这道题,就是卡住那些"知道欧几里得算法但该算法"的考生——五级不再考纯理论,而是考代码执行痕迹,这是从理解到实践的跨越。