Мне нужна помощь в этом фрагменте рекурсии кода - PullRequest
0 голосов
/ 04 мая 2020
public class Main {

    public static void main(String[] args) {
    // write your code here
        int test = 3;
        printFun(test);
    }

    static void printFun(int test)
    {
        if (test < 1)
            return;

        else {
            System.out.printf("%d ", test);

            // Statement 2
            printFun(test - 1);

            System.out.printf("%d ", test);
            return;
        }
    }
}

Его вывод такой:

3 2 1 1 2 3

Может кто-нибудь помочь мне, как этот вывод поступает.

Я знаю, что там используется рекурсия, но согласно моей концепции результат должен быть 3 2 1, но это не так, помогите мне в этом. Где я пропускаю концепции.

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Оператор print после функции printFun () будет каждый раз помещаться в стек. Таким образом, когда l oop закончится, все операторы печати будут выполняться в обратном порядке. Чтобы сделать вывод 3 2 1, вы должны удалить оператор print после метода printFun ().

0 голосов
/ 04 мая 2020

Вы печатаете значение дважды, до вызова рекурсивного метода и после него. Удалите вторую System.out.printf("%d ", test); и все должно быть в порядке.

...