2014-11-29 4 views
-2

Помогите мне понять вывод этой программы:Заявления после рекурсивного вызова

int n; 
void rec() { 
     n = n + 1; 
     if (n < 3) { 
      rec(); 
      System.out.println(n); // (*) 
     } 
    } 

Выход «3 3». почему строка (*) даже выполнена?

+0

Как у n есть ценность? –

+0

Возможно, потому что в какой-то момент 'n <3'. –

ответ

1

Предполагая n инициализируется в 0 в начале:

  1. В первый раз функция вызывается n получает приращение до 1. 1 < 3 поэтому rec() называется второй раз.

  2. Второй раз по n увеличивается на 2. 2 < 3 поэтому rec() называется в третий раз.

  3. Теперь третий раз через n увеличивается до 3. 3 составляет не менее 3, поэтому оператор if не выполняет. Итак, теперь вы выходите из текущего вызова функции (третий раз) и возвращаетесь к предыдущему вызову, который является вторым вызовом.

  4. Теперь, когда вызов rec() закончил в вашем втором вызове, System.out.println называется и значение n отображается (3). Теперь второй вызов завершается, поэтому вы выходите из текущего вызова функции (второй раз) и возвращаетесь к предыдущему вызову, который является первым вызовом.

  5. Теперь вы в первом вызове функции и так как вызов rec() закончена, вы звоните System.out.println снова, который снова отображает значение 3.