Rekursive Algorithmus schreiben

Bolik

Mitglied
Java:
public static int collatzIterativ(int n){
		
		int count = 0; 
		
		while (n != 1){	 
				if ( n % 2 == 0) 
					n = n / 2;
		 
				else 
					n = 3 * n + 1;	
		count = count + 1;	
		}
		return count;	
	}

wie kann ich eine rekursive Version diese Algorithmus schreiben.
 
z. B. so

Java:
    public static int collatzRekursiv(int n) {
        return (n == 1)
                ? 0
                : (n % 2 == 0)
                        ? collatzRekursiv(n / 2) + 1
                        : collatzRekursiv((3 * n) + 1) + 1;
    }
 
Zuletzt bearbeitet:
Das ist ein Operator
Java:
(Bedingung) ? true Zweig : false zweig

Siehe auch: The ? : operator in Java


Generell muss man beim umschreiben eines gegeben Algos nicht überlegen, nichtmal den Algo kennen.

1. Einfachsten Fall überlegen in dem Fall (while n!=1), ist der einfachste (n==1), denn es wird 0 zurückgegeben.
2. if else übertragen. Es wird n verändert, n ist Parameter der Methode. Also rekursiven Aufruf mit verändertem n für if und else
3. count = count + 1 übertragen, wird angewendet auf jedem Schleifendurchlauf, also hinter jeden rekursiven Aufruf + 1 klemmen, da - sobald der einfachste Fall erreicht ist, der Return Wert vom einfachsten Fall mit jedem +1 verrechnet wird 0 + 1 + 1+ 1+ 1 ...

Deshalb bevorzuge ich den ?: Operator, da sofort klar bzw. abzulesen ist, was der einfachste und die anderen Fälle sind.
 
Zuletzt bearbeitet:
Ist schlicht total unübersichtlich.

Im Gegenteil. Übersichtlicher geht es gar nicht mehr, da man auf die Art jede Rekursion implementieren kann und das Schemata immer gleich zu lesen ist. Hier wird eine Rekursion auf das wesentliche beschränkt. Niemand braucht if-else-Kaskaden.

Aber was der Bauer nicht kennt...

Würde hier durch keine Code-Review kommen.

Hier tummelt sich ja auch die Java-Elite. So wie du 😀 ...
 
Zuletzt bearbeitet:

Zurück
Oben