经典写法:
//保证detaX>=0,detaY>=0
//注意前面是先判断detaY==0,后面就是detaX%detaY的形式,否则就是先判断detaX==0,后面跟detaY%detaX的形式
private int getGY(int detaX, int detaY) {
return detaY==0?detaX:getGY(detaY,detaX%detaY);
}
便于理解写法
private int getGY(int detaX, int detaY) {
if(detaX == 0) {
return detaY;
}
if(detaY == 0) {
return detaX;
}
//每次迭代 |detaY%detaX,| 一定小于 |detaX|,所以一定会触底
return getGY(detaY%detaX, detaX);
}
错误写法1
private int getGY(int detaX, int detaY) {
if(detaX == 0) {
return detaY;
}
if(detaY == 0) {
return detaX;
}
if(detaX > detaY){
//这样写是不行的,考虑deta=2,detaY=-3的情况,会循环不断在这一行产生调用,致使栈溢出
return getGY(detaX%detaY, detaY);
}
return getGY(detaY%detaX, detaX);
}