У меня есть следующая рекурсивная функция, поэтому, например, при 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. Я пытался выяснить шаблон, чтобы я мог написать итеративный алгоритм, но пока нет очевидного способа сделать это.