Hallo Leute,
ich hab wieder mal ein knifflige Aufgabe: Und zwar geht es um die Entrekursivierung folgendes Algorithmus.
Aufgabe 1/b
http://www.pervasive.jku.at/Teaching/_2011SS/AlgoPI1/Uebungen/UE07/Algo1_Uebung07.pdf
Diesen Algorithmus hab ich erstellt und getestet (er funktioniert):
Laut einem Übungsbsp.:http://www.pervasive.jku.at/Teaching/_2011SS/AlgoPI1/Begleitmaterial/Übung/07_Entrekursivierung.pdf
hab ich den Algorithmus in Java Programmiert. Wenn ich den Algorithmus nun teste, komme ich in eine Endlosschleife.
Zuerst mal mein Kellerspeicher:
//////////////////
Meine iterative Variant:
/////////////////
Könnte auch sein, dass mein Fehler im Kellerspeicher liegt.
Danke im Voraus für eure Hilfe!
Lg Troubles
ich hab wieder mal ein knifflige Aufgabe: Und zwar geht es um die Entrekursivierung folgendes Algorithmus.
Aufgabe 1/b
http://www.pervasive.jku.at/Teaching/_2011SS/AlgoPI1/Uebungen/UE07/Algo1_Uebung07.pdf
Diesen Algorithmus hab ich erstellt und getestet (er funktioniert):
Java:
public static int stirling ( int n, int k){
if (n==k){
return 1;
}
if (k==0 && n>0||n<k){
return 0;
} else {
return stirling (n-1, k-1) + k*stirling(n-1,k);
}
}
Laut einem Übungsbsp.:http://www.pervasive.jku.at/Teaching/_2011SS/AlgoPI1/Begleitmaterial/Übung/07_Entrekursivierung.pdf
hab ich den Algorithmus in Java Programmiert. Wenn ich den Algorithmus nun teste, komme ich in eine Endlosschleife.
Zuerst mal mein Kellerspeicher:
Java:
public class stack {
// Array anlegen
static int[] speicher = new int[50];
static void push(int x) {
if (speicher[0] == 0) {
speicher[0] = x;
} else {
// Ende suchen
int i = 0;
while (speicher[i] != 0) {
i++;
}
speicher[i] = x;
}
}
static int pop() {
int i = 0;
int k = 0;
if (speicher[i] == 0) {
return speicher[i];
} else {
while (speicher[i] != 0) {
i++;
}
k = speicher[i - 1];
speicher[i - 1] = 0;
return k;
}
}
static boolean emptyStack() {
if (speicher[0] == 0) {
return true;
} else {
return false;
}
}
}
//////////////////
Meine iterative Variant:
/////////////////
Java:
public class kombinatorik_ohne {
public static void main(String[] args) {
int r = 0;
r = stirling(4, 2);
System.out.println("Result: " + r);
}
public static int stirling(int n, int k) {
int result = 0;
int state = 1;
int w1;
int w2 = 1;
while (state != 0) {
System.out.println(111);
switch (state) {
case 1:
if (n == k) {
result = 1;
state = 0;
} else if (k == 0 && n > 0 || n < k) {
result=0;
state=0;
}else{
stack.push(n);
stack.push(k);
n = n - 1;
k = k - 1;
state = 1;
}
break;
case 2:
n = stack.pop();
k = stack.pop();
w1 = result;
System.out.println(w1);
stack.push(w1);
stack.push(w2);
n = n - 1;
state = 1;
break;
case 3:
w1 = stack.pop();
w2 = k * result;
System.out.println(w2);
result = w1 + w2;
state = 0;
break;
}// switch
if (state == 0 && !stack.emptyStack()) {
state = stack.pop();
}
}
return result;
}
}
Könnte auch sein, dass mein Fehler im Kellerspeicher liegt.
Danke im Voraus für eure Hilfe!
Lg Troubles