Hallo liebes Forum,
ich bin ganz neu hier und hab ein kleines Problem mit einem Programm. Ich muss ein bestimmtes Glied der Collatz-Folge bestimmen und ausgeben und das ganze muss rekursiv implementiert werden. Ich wüsste wie ich es realisieren könnte, wenn ich das Programm sich selbst aufrufen lassen nach dem Schema:
Allerdings haben wir bestimmte Funktionen vorgegeben die wir nutzen sollen. Die erste beschreibt lediglich die Iterationsvorschrift der Collatz-Folge, diese habe ich auch schon ausgefüllt. Für die zweite braucht man allerdings zwei Paramter, wobei der erste für die Zahl steht und der zweite für das Glied der Collatz-Folge, das man erhalten möchte. Ich könnte es mit einer Iteration lösen, das Ganze muss allerdings rekursiv implementiert werden und ich komme nicht dahinter wie ich es nach diesem Schema hinbekomme:
Hoffe mir kann jemand in irgendeiner Weise weiterhelfen, ich komme nicht ganz dahinter.
ich bin ganz neu hier und hab ein kleines Problem mit einem Programm. Ich muss ein bestimmtes Glied der Collatz-Folge bestimmen und ausgeben und das ganze muss rekursiv implementiert werden. Ich wüsste wie ich es realisieren könnte, wenn ich das Programm sich selbst aufrufen lassen nach dem Schema:
Java:
static void collatz(int n) {
System.out.println(n);
if (n != 1) {
if (n % 2 == 0) {
collatz(n/2);
} else {
collatz(3*n+1);
}
}
}
Allerdings haben wir bestimmte Funktionen vorgegeben die wir nutzen sollen. Die erste beschreibt lediglich die Iterationsvorschrift der Collatz-Folge, diese habe ich auch schon ausgefüllt. Für die zweite braucht man allerdings zwei Paramter, wobei der erste für die Zahl steht und der zweite für das Glied der Collatz-Folge, das man erhalten möchte. Ich könnte es mit einer Iteration lösen, das Ganze muss allerdings rekursiv implementiert werden und ich komme nicht dahinter wie ich es nach diesem Schema hinbekomme:
Java:
public class CollatzFolge {
/**
* Iterationsforschrift der Collatz-Folge.
*
* @param x Zahl auf die die Iterationsforschrift angewand wird.
* @pre x > 0
* @return <br / >
* x gerade , dann (x / 2)
* x ungerade , dann (x * 3 + 1)
*/
private static long f(long x) {
if (x % 2 == 0) {
x = x/2;
return x;
} else {
x = x * 3 + 1;
return x;
}
}
/**
* Berechnet das n_te Glied der CollatzFolge mit der
* Iterationsforschrift.
*
* @param x Zahl mit der die Berechnung angefangen wird.
* @param n Glied der CollatzFolge
* @pre x > 0 && n >= 0
* @return n_te Glied der CollatzFolge <br / >
* Das 0_te Glied ist x
*/
public static long fn(long x, int n) {
// TODO: Hier komm Ihr Code rein!
// Sie koennen hier die Funktion f benutzen
return 0;
}
Hoffe mir kann jemand in irgendeiner Weise weiterhelfen, ich komme nicht ganz dahinter.