Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 一种方法的工作_Java_Methods - Fatal编程技术网

Java 一种方法的工作

Java 一种方法的工作,java,methods,Java,Methods,当myx=585和y=78时,我的方法在给出结果之前执行的步骤数为3。当我更改顺序时,x=78和y=585步骤数为4。这种依赖的原因是什么?我尝试了几对整数,当x>y步数为a时,更改后的步数为a+1 昨天我试着问过这个问题,希望现在我更清楚更准确。在代码中加入一些System.out.println之后,你的方法会在继续查找GCD之前故意切换数字。以下是585、78的输出: 又打了一个电话。X=585Y=78 又打了一个电话。X=78 Y=39 又打了一个电话。X=39 Y=0 三十九 下面是7

当my
x=585
y=78
时,我的方法在给出结果之前执行的步骤数为3。当我更改顺序时,
x=78
y=585
步骤数为4。这种依赖的原因是什么?我尝试了几对整数,当
x>y
步数为
a
时,更改后的步数为
a+1


昨天我试着问过这个问题,希望现在我更清楚更准确。

在代码中加入一些
System.out.println
之后,你的方法会在继续查找GCD之前故意切换数字。以下是
585、78的输出:

又打了一个电话。X=585Y=78
又打了一个电话。X=78 Y=39
又打了一个电话。X=39 Y=0
三十九

下面是
78585
的输出:

又打了一个电话。X=78 Y=585
又打了一个电话。X=585Y=78
又打了一个电话。X=78 Y=39
又打了一个电话。X=39 Y=0
三十九

额外的电话是从两个号码的切换中来的

解释

如果我们先以最大的数字来干运行这段代码的第一次执行,我们得到:

static int gcd(int x, int y) {
    if (y==0)  return x;
    return gcd(y, x%y);
}
如果我们先用最小的数字:

x = 585
y = 78

y is not equal to 0 so don't return x.

make recursive call with: y in the place of x. (this is the switch)
x % y in the place of y (585 % 78 = 39)

额外的调用是交换这两个值,从模运算中可以清楚地看出,这应该发生,给定任何
x
y
,给定
x
x>0
x%y=x
。如果较小的数字保持在
x
位置,算法就会一直运行。

是否有任何东西阻止你拿一张纸和一支铅笔自己做数学?如果有人问这个问题,你会如何回答?请用语言标记你的问题。是的,转换是有意的。请看这里:
x = 78
y = 585

y is not equal to 0 so don't return x
make recursive call with: y in the place of x (so first argument is 585)
x % y in the place of y ( 78 % 585 = 78)