I'm trying to write a recursive function that removes the first k even numbers from the stack. If there are less than k even elements in the stack, just remove all even elements by not using any loops or data structures other than the stack passed in as a parameter. I have this but I can't figure out how to incorporate k correctly
public static int removeEvenNumbers(Stack<Integer> stack, int k) {
if (k <= 0 || stack.empty()) {
return 0;
}
if (stack.peek() % 2 == 0) {
stack.pop();
return 1 removeEvenNumbers(stack, k - 1);
} else {
int removed = stack.pop();
int returns = removeEvenNumbers(stack, k);
stack.push(removed);
return returns;
}
}
CodePudding user response:
You aren't verifying K after removing a element, so if you just removed a element with K = 1, then you should stop.
public static int removeEvenNumbers(Stack<Integer> stack, int k) {
if (k <= 0 || stack.empty()) {
return 0;
}
if (stack.peek() % 2 == 0) {
stack.pop();
return k > 1 ? removeEvenNumbers(stack, k - 1) : 1;
} else {
int removed = stack.pop();
int returns = removeEvenNumbers(stack, k);
stack.push(removed);
return returns;
}
}
