Also, Stack Overfloe errors bekommt man immer, wenn rekursionen zu "tief" werden, es also zuviele Rekursionsschritte gibt. Das passiert bei dir, weil du die Rekursionsabbruchbedingung nicht richtig implementiert hast.
|
Java Quellcode
|
1
|
int Zaehler = 0;
|
hier setzt du in jedem Rekursionsschritt den Zähler wieder auf 0. Dadurch wird die rekursion immer wieder aufgerufen, da 0 immer kleiner als t ist (für ein positives t). Dadurch wird die Rekursion "unendlich"-oft aufgerufen, bis der Stack voll ist und du eben den Stack Overflow error bekommst. Daher musst du dir für die Abbruchbedingung etwas anderes einfallen lassen. Entweder du schleifst den Zähler durch jede Rekursionsstufe mit (dabei musst du den Zähler als 3. Parameter der Funktion mit übergeben) oder du lässt t einfach gegen 0 wandern. Also statt dass du einen Zähler jedesmal um 1 erhöhst bis er gleich t ist, ziehst du von t immer 1 ab, bis du bei 0 angekommen bist.
Zu deinem Problem mit den Doubles: Java rechnet in der Regel immer mit doubles und nicht mit floats. Sobald du in einer Rechnung irgend einen Bruch oder eine "komma-zahl" angibst, rechnet Java das Ergebnis als Double aus. Da deine Funktion aber eine float erwartet (und float weniger genau ist als double) kommt die Meldung mit dem "precision loss". Die Meldung kannst du unterdrücken indem du explizit auf float castest:
|
Java Quellcode
|
1
|
(float)(1.2 * n)
|
In dem Fall geht der Compiler davon aus, dass du weißt was du machst und dir des Präzisionsverlustes bewusst bist.