Java 一种方法的工作
当myJava 一种方法的工作,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
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)