# Rekursive Collatz-Folge



## scruffytramp (20. Mai 2014)

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:



```
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:


```
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.


----------



## 3301 (20. Mai 2014)

Die Lösung weiß ich aber es sind Hausaufgaben und du solltest sie alleine machen. 

Ein Tipp von mir:
Die Methode fn muss eine Abbruch Bedingung haben sonst läuft die Rekursion endlos. Also.. wann hört die Rekursion auf? Wenn Du n=19 eingibst musst du ja irgendwann aufhören mit der Rekursion. Und logischer weiße wäre es bei 0. Ansonsten kannst du die obere Methode als Hilfe für deine rekursive Methode benutzen.


----------

