fakultät rekusriv

M

Maximaltime

Gast
Hallo bei zeile 9 kommt missing return statement kann mir jemand helfen? wie man sieht will ich ganz einfach fakultaet rekursiv berechnen.


Java:
public class fakultaet{


	public static int fakultaets(int n){
	int k=1;

	if( n==1) return k;
	else if(n<1) return k=n*fakultaets(n-1);
}

	public static void main(String[]args){


		int f=6;
		int zahl=fakultaets(f);
		System.out.println("Die Fakultät von "+f+" ist "+zahl);
	}
}
 

Sonecc

Gesperrter Benutzer
Wenn n = 1 ist, dann gibt er k zurück
Wenn n < 1 ist, dann gibt er k=n*fakultaets(n-1) zurück
Wenn n > 1 ist, gibt er gar nichts zurück -> Missing return statement

Immer darauf achten, dass eine Methode die etwas zurückgeben soll unter allen umständen auch etwas zurückgibt!
 

muckelzwerg

Bekanntes Mitglied
Wenn Du an den if-klauseln ein return hast, kannst Du dir das "else" sparen. Und dann versuch mal die Funktion so umzustellen, dass es ein return-statement ohne irgendeine Bedingung gibt, das am Ende des Blocks steht. Damit sollte es etwas weniger verschachtelt und leichter zu lesen werden.
Java:
if( ... ){
    return ...;
}
return ...;

Und dann denk nochmal über die Variablen nach. Brauchst Du "k" wirklich? Geht es ohne "k" vielleicht einfacher?
 
Zuletzt bearbeitet:

Andi_CH

Top Contributor
Erst mal sauber einrücken und die hier so hochgelobten Konventionen einhalten:

Java:
public class Fakultaet {

	public static int fakultaets(int n) {
		int k=1;

		if (n == 1) 
			return k;
		else if (n < 1)
			return k = n * fakultaets(n - 1);
	}

	public static void main(String[]args) {
		int f = 6;
		int zahl = fakultaets(f);
		System.out.println("Die Fakultät von " + f + " ist " + zahl);
	}
}

Die Fehlermeldung auf Zeile 3 heisst übrigens: "This method must return a result of type int"

Ausserdem n < 1? 0 ist schon ausgeschlossen also sind hier nur noch negative n möglich und davon ist IMO die Fakultät gar nicht definiert.

Was gibt denn deine Funktion
Code:
fakultaets
im Falle von n > 1 zurück???
 

Neue Themen


Oben