Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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.
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.
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.