计算要使用递归返回的值

时间:2015-03-19 22:12:32

标签: recursion

在这个递归方法中,我试图使用初始调用mystery5(-23, -48)计算一个数字。在完成我的第一系列if语句后,我得到了数字2348。一旦我到达决策语句的else分支,方法调用在等式中有什么优先级?此外,前两个if语句中的mystery5方法调用前面的负号是否表示如果x插入到方法调用中,则会有一个正-23值(Ex :-mystery5(-23, -48))?

public int mystery5(int x, int y){
  if (x < 0) {
    return -mystery5(-x, y);
  } else if (y < 0) {
    return -mystery5(x, -y);
  } else if (x == 0 && y == 0) {
    return 0;
  } else {
    return 100 * mystery5(x / 10, y / 10) + 10 * (x % 10) + y % 10;
  }
}

1 个答案:

答案 0 :(得分:0)

因此我认为mystery5(1, 0)返回1.假设这是正确的,那么调用mystery5(-1, 0)将会触及第一个语句,它会看到x = -1)小于零。这样做return -mystery5(-x,y),因此当放入xy的值时,这相当于return -mystery5(1,0)-前面的mystery5会在调用时翻转mystery5函数结果上的符号。因此,当mystery5(1,0)返回1时,会被-1否定。这是mystery5(-1,0)的最终返回值。