J'ai mis en œuvre une solution pour résoudre le problème Sierpinski carpet en utilisant la récursivité. Maintenant, je veux utiliser une pile au lieu de la méthode récursive pour résoudre le tapis Sierpinski. J'essaie de traduire ma méthode récursive dans la pile, mais j'ai des problèmes quand j'appuie sur les variables de ma méthode récursive. Ceci est le morceau de code que je dois pousser et pop drawGasket(x + i * sub, y + j * sub, sub);
tapis Sierpinski utiliser une pile au lieu de la récursivité
Lorsque vous appelez drawGasket (0, 0, 729), vous devriez voir ce qui suit à l'écran:
récursive méthode:
public void drawGasket(int x, int y, int side) {
int sub = side/3;
//Draw center square
g2d.fill(new Rectangle2D.Double(x + sub, y + sub, sub - 1, sub - 1));
if(sub >= 3) {
//Draw 8 surrounding squares
for (int i = 0; i < 3; i++){
for (int j = 0; j < 3; j++){
if (j!=1 || i != 1)
drawGasket(x + i * sub, y + j * sub, sub);
}
}
}
}
mise en œuvre de la pile:
public void stack (int x, int y, int side){
GenericStack<Integer> s = new GenericStack<>();
int sub = side /3;
g2d.fill(new Rectangle2D.Double(x + sub, y + sub, sub - 1, sub - 1));
while (!s.isEmpty()){
x=s.pop();
if (sub >=3){
for (int i = 0; i < 3; i++){
for (int j = 0; j < 3; j++){
if (j!=1 || i != 1){
int operation = x+i*sub;
s.push(operation);
int operation2 = y+j*sub;
s.push(operation2);
s.push(sub);
}
}
}
}
}
}
My Stack Classe:
public class GenericStack<T> {
private int size; // size
private Node<T> head; // node head
public GenericStack() { // constructor
head = null; // head is null
size = 0; // size is zero
}
public void push(T element) {
if(head == null) { // if head is null
head = new Node(element); // head is node
} else {
Node<T> newNode = new Node(element);
newNode.next = head;
head = newNode;
}
size++;
}
public T pop() {
if(head == null)
return null;
else {
T topData = head.data;
head = head.next;
size--;
return topData;
}
}
public T top() {
if(head != null)
return head.data;
else
return null;
}
public int size() {
return size;
}
public boolean isEmpty() {
return size == 0;
}
private class Node<T> {
private T data;
private Node<T> next;
public Node(T data) {
this.data = data;
}
}
Je ne vois pas de question. – shmosel
La question (si je comprends ce qui est écrit) est "Comment puis-je écrire une version itérative (basée sur une pile) de la solution récursive que j'ai déjà écrite?" – geneSummons