2015-01-30 3 views
1

Я столкнулся с этим вопросом в интервью.передав значение методу, а затем распечатав его

public class NuVizzDemo { 
    public static void main(String args[]){ 

     int x=6; 
     System.out.println("initial value of x is "+x); 
     int y=getX(x); 
     System.out.println("value of x after method is executed is "+x); 
     System.out.println("value of y is "+y); 
    } 

    private static int getX(int x) { 
     // TODO Auto-generated method stub 
     if(x==1){ 
      System.out.println("value of X is "+x); 
      return 0; 
     } 
     else 
      System.out.println("value of x is "+x); 
      return 1+getX(x-1); 
    } 

} 

Я хочу знать, как же значение y является 1 менее x?

+0

Что вы ответили в интервью? –

+4

На самом деле я не хочу отвечать на этот вопрос, так как он портит усилия интервьюера, чтобы ответить на этот вопрос. Но вы можете запустить код и посмотреть, почему это происходит. – MichaelCMS

+6

Боковое примечание: у вас нет брекетов вокруг вашего предложения 'else'. Это не повлияет на результат, но это означает, что отступы являются своего рода ложью. –

ответ

7

Поскольку функция getX является recursive и следует этой схеме:

x = 1: 0 
x = 2: 1 + getX(1) = 1 + 0 = 1 
x = 3: 1 + getX(2) = 1 + 1 + getX(1) = 1 + 1 + 0 = 2 
... 

Edit: Вы должны сделать getX более надежным путем добавления предложения для x <= 0. Для такого значения x ваш код будет вызывать StackOverflowError (что является хорошим типом для вопроса, размещенного в Stack Overflow ☺).

+1

плюс 1, медленный способ вычитания '1', или если вы его даете' 0', вы получаете StackOverflowError;) –

+1

Да, вот почему я пропустил 0 :) –

0

Так что этот рекурсивный вызов будет идти 5 раз, а в 5-й раз возвращаемое значение будет 0, потому что оно вернет 0, когда x == 1.

Так что, когда:

x = 1 -> 0 
x = 2 -> 0 + 1 = 1 
x = 3 -> 1 + 1 + getX(1) = 2 
x = 4 -> 1 + 1 + 1 + getX(1) = 3 
x = 5 -> 1 + 1 + 1 + 1 + getX(1) = 4 
x = 6 -> 1 + 1 + 1 + 1 + 1 + getX(1) = 5 

Так что у = 5.

1

Поскольку

return 1+getX(x-1);

даст вам значение 1 + 1 + 1 + 1 + 1 + 0 = 5, так как, когда x достигает до 1 вы expicitly возвращение 0.

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