Speicherzugriffsfehler in C wieso?
wat is hier los
hab n fehler, hab potenz mit pot verwechsel
2 Antworten
Hier mal ein Vorschlag, wie Du potenz etwas einfacher halten kannst:
int potenz( int zahl, int pot){
if (pot==0) return 1;
return zahl*potenz(zahl,pot-1);
}
Was natürlich noch zu bedenken wäre: Was wenn pot negativ ist?
Pot negativ ist wie Reibung im Physikunterricht damals in der Schule: kann man vernachlässigen
Es muss heißen
if (pot != 0)
Aber selbst dann ist das Ergebnis falsch, denn Du musst ergebnis standardmäßig auf 1 setzen. Irgendwas hoch 0 ist immer 1.
Die Zeile int ergebnis = 0; in main kannst Du streichen.
Die Sache ist: In der Funktion potenz bekommt ergebnis nur dann einen Wert, wenn pot != 0 ist. Wenn pot aber 0 ist, wird ergebnis geliefert.
Da das aber 0 ist, wenn Du nicht explizit 1 zuweist, wird das komplette Ergebnis auch 0, denn 0 * irgendwas ist 0.
Sprich: potenz(2, 2) wäre ausgewertet worden zu 2 * potenz(2, 1) = 2 * 2 * potenz(2, 0) = 2 * 2 * 0.
Und potenz(2, 0) würde 0 liefern, was nicht stimmt.
ahhh jetzt hab ich es, die rekursion geht ja solange weiter bis pot = 0 dann gehts in den else zweig und ergebnis = 0 wird an die vorherige instanz zurückgegeben, was beudetet dass eben alles 0 wird. danke für die hilfe, dass mit 2, 0 mach ich nochmal extra mit ner if anweisung
achso ne das ist ja schon automatisch weil ich jetzt else return 1; gemacht habe
ók danke, es funktioniert, ich verstehe aber nicht, ich dachte wenn ich da sowieso was reinspeichere ist es egal was ich in dieses ergebnis speichere oder ? also das ist mein neuer code: