Как я могу легко преобразовать эту рекурсивную функцию в итеративную, используя стек? - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть следующая рекурсивная функция, поэтому, например, при n = 43, я получаю последовательность

4 3 2 4 6 9 14 3 2 4 6 9 2 4 6 4 2 5 8 12 18 28 43

private static void F2Recur(int n) {
    if(n >= 6) {
        F2Recur(n/3);
        F2Recur(2*n/3);
    }
    System.out.print(n);
    System.out.print(" ");
}

Теперь я хочу преобразовать это в итерационную функцию, используя стек. До сих пор мне удавалось дублировать только несколько последних цифр, поскольку очевидно, что они равны

current * 2/3

 private static void F2NonR(int n) {
    Stack s = new Stack();
    int current = n;
    s.push(current);
    while(current >= 6) {
        current = 2*current/3;
        s.push(current);
    }
    while(!s.isEmpty()) {
        System.out.print(s.pop());
        System.out.print(" ");
    }
}

Я заметил из правильной последовательности, что 14 от 2-го последнего ди git 28/2, 9 от 3-го последнего ди git 18/2, 6 от 12/2 и т. д. и некоторые цифры перед ними только их 2/3. Я пытался выяснить шаблон, чтобы я мог написать итеративный алгоритм, но пока нет очевидного способа сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...