2015-03-19 3 views
0

В этом рекурсивном методе я пытаюсь вычислить число, используя начальный вызов mystery5(-23, -48). Пройдя мою первую серию утверждений if, я добираюсь до чисел 23 и 48. Как только я перейду на другую ветвь утверждений решения, какое приоритетное значение имеет вызов метода в уравнении? Кроме того, появляется отрицательный знак перед вызовом метода mystery5 в первых двух операциях if, указывающих на то, что будет положительное значение x, если в вызов метода вставлен -23 (пример: -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; 
    } 
} 

ответ

0

Так он смотрит на меня, что mystery5(1, 0) возвращает 1. Если предположить, что это правильно, то вызов mystery5(-1, 0) бы ударил, что первое утверждение, и было бы видно, что x = -1), который меньше нуля. Это делает return -mystery5(-x,y), поэтому, когда введены значения для x и y, это эквивалентно return -mystery5(1,0). - перед mystery5 сбрасывает знак на результат функции mystery5 при вызове. Поэтому, когда mystery5(1,0) возвращает 1, это сбрасывается до -1. И это окончательное значение возврата mystery5(-1,0).

Смежные вопросы