方法的工作

时间:2014-02-01 10:59:29

标签: java methods

static int gcd(int x, int y) {
    if (y==0)  return x;
    return gcd(y, x%y);
}

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

昨天我试着询问一下,我希望现在我更加清晰准确。

1 个答案:

答案 0 :(得分:0)

在您的代码中添加一些System.out.println之后,在继续查找GCD之前,您的方法会有意切换数字。这是585, 78的输出:

  

再打一次电话。 X = 585 Y = 78
  另一个电话。 X = 78 Y = 39
  另一个电话。 X = 39 Y = 0
  39

以下是78, 585的输出:

  

再打一次电话。 X = 78 Y = 585
  另一个电话。 X = 585 Y = 78
  另一个电话。 X = 78 Y = 39
  另一个电话。 X = 39 Y = 0
  39

额外的电话来自切换两个号码。

解释

如果我们干这个代码的第一次执行,首先执行最大的数字,我们得到:

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 = 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)

额外的调用是交换两个值,并且从模运算中可以清楚地知道这应该发生,给定xy给定x < y和{{ 1}},x > 0。如果较小的数字保留在x % y = x位置,则算法将运行并运行。