Java 如何使用递归打印循环缓冲区(使用数组实现)的元素?

Java 如何使用递归打印循环缓冲区(使用数组实现)的元素?,java,recursion,data-structures,Java,Recursion,Data Structures,如何递归打印循环队列的元素。有人能帮我修复这个代码段吗 public void print(int rear){ // f is the front of queue if(rear == f) return; else { print(rear - 1); System.out.println(Queue[rear - 1]); } } 在循环缓冲区中,从前面移除元素并在后面添加元素。 我认为没有必要将re

如何递归打印循环队列的元素。有人能帮我修复这个代码段吗

public void print(int rear){
  // f is the front of queue
    if(rear == f)
        return;
    else
    {
        print(rear - 1);
        System.out.println(Queue[rear - 1]);
    }
}

在循环缓冲区中,
从前面移除元素
在后面添加元素

我认为没有必要将
rear
指定为
print()
方法的参数

相反,您可以实现以下代码

public void print() {
    //f -> front and r -> rear
    if (f == r) {
        return;
    }
    System.out.println(Q[f]);
    f = (f + 1) % N;
    print();
}
如果愿意,您不需要将所有元素从队列中移出,只需按上述方式打印即可。 如果希望避免递归,请在
print()
块中简单地使其循环

public void print() {
    while (f != r) {
        System.out.println(Q[f]);
        f = (f + 1) % N;
        // print(); // no more calling recursion
    }
}

注:为供参考,我对排队和退队的实现如下

public void enqueue(Object obj) throws QueueFullException {
    if (isFull()) {
        // some exception
    } else {
        Q[r] = obj;
        r = (r + 1) % N;
    }
}

public Object dequeue() throws QueueEmptyException {
    Object item;
    if (isEmpty()) {
        // some exception
    } else {
        item = Q[f];
        Q[f] = null;
        f = (f + 1) % N;
    }
    return item;
}

请检查我的解决方案,如果它解决了您的问题,我将不胜感激。