У меня есть задание, в котором мне даны рекурсивные функции, и я должен переписать его, используя только стеки (без рекурсии). Я не знаю, как реализовать следующую функцию
public static void fnc1(int a, int b) {
if (a <= b) {
int m = (a+b)/2;
fnc1(a, m-1);
System.out.println(m);
fnc1(m+1, b);
}
}
Проблема в том, что я не могу понять, как реализовать рекурсивные функции там, где есть рекурсия головы и хвоста.
Я пытался l oop через стек, выталкивая значение (a, b) каждый раз и выдвигая новое значение (a, m-1) или (m + 1, b) вместо вызова "fnc1 ()", но вывод всегда был не в порядке.
РЕДАКТИРОВАТЬ: Вот моя попытка кода:
public static void Fnc3S(int a, int b) {
myStack stack1_a = new myStack();
myStack stack1_b = new myStack();
myStack output = new myStack();
stack1_a.push(a);
stack1_b.push(b);
while(!stack1_a.isEmpty()) {
int aVal = stack1_a.pop();
int bVal = stack1_b.pop();
if(aVal <= bVal) {
int m = (aVal+bVal)/2;
stack1_a.push(aVal);
stack1_b.push(m-1);
output.push(m);
stack1_a.push(m+1);
stack1_b.push(bVal);
}
}
while(!output.isEmpty()) {
System.out.println(output.pop());
}
}
И это выводит:
(a, b) = (0, 3)
Recursive:
0
1
2
3
Stack Implementation:
0
3
2
1