Как работает рекурсия в массиве?

Есть код:

class RecTest{
    int values[];
    RecTest(int i){
        values=new int[i];
    }
    void printArray(int i){
        if(i==0) return;
        else printArray(i-1);
        System.out.println("["+(i-1)+"]"+values[i-1]);
    }
}
public class Recursion2{
    public static void main(String args[]){
        RecTest ob=new RecTest(10);
        int i;
        for(i=0;i<10;i++) ob.values[i]=i;
        ob.printArray(10);
    }
}


И результат
результат работы [0]0
[1]1
[2]2
[3]3
[4]4
[5]5
[6]6
[7]7
[8]8
[9]9

По моей логике:
1.   for(i=0;i<10;i++) ob.values[i]=i; // заполняются элементы массива от 0 до 9 соответственно
2.  Затем отрабатывает ob.printArray(10);
Где 
 if(i==0) return;
 else printArray(i-1);    отрабатывает от 10 до 0 и на выход

в итоге System.out.println вообще не должно использоваться а оно выводит, как это работает?
  • Вопрос задан
  • 573 просмотра
Решения вопроса 1
xez
@xez Куратор тега Java
TL Junior Roo
Работает это так:
Когда i становится равной 0, отрабатывает return.
Этот return возвращает в то место, откуда был вызван метод printArray (помним, что он вызывался рекурсивно).
Следующей строкой после вызова printArray идет System.out.println("["+(i-1)+"]"+values[i-1]);, которая и выполняется соответствующее число раз для соответствующих i
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы