Berechnen Sie das Exponential durch Rekursion

Berechnen Sie das Exponential durch Rekursion

Problem

Bitte, ich möchte die Fehler kennen, die in diesem Algorithmus existieren. Zur Information: Dieser Algorithmus berechnet die Exponentialmethode durch Rekursion.

 #include #include #include int factoriel (int n, int i, int fact) {if (i = n + 1) {fact = 1; Tatsache zurückgeben; } else {fact = fact * i; i ++; Faktoriel (n, i, Tatsache); }} float puissance (int n, int i, float x, float p) {if (i = n + 1) {p = 1; return p; } else {p = p * x; i ++; Glanz (n, i, x, p); }} int main () {const float EPS = 0, 0001; int i, n, Tatsache; float x, p, s, T; printf ("Donner x:"); scanf ("% f", & x); n = 0; T = 1; s = 0; Tatsache = 1; p = 1; während (Boden (T)> EPS) {T = Stärke (n, 1, x, p) / Faktor (n, 1, Tatsache); s = s + T; n = n + 1; } printf ("Exp (% f) =% f \ n", x, s); } 

Lösung

Mehrere Fehler.

Ich gehe über die Absurdität der Verwendung von Rekursion zur Berechnung der Fakultät und der Potenz hinweg, nehme an, Sie haben darum gebeten.

Erstens, detaillierte Syntax ultra-klassisch: Der Test ist ==, nicht =. In Ihren beiden Funktionen sollte sein, wenn (i == n +1)

Schlimmer noch, im else-Test beider Funktionen gibt es keine Rückkehr. Damit Ihre Funktion nichts zurückgibt, kann sie einen zufälligen Wert annehmen. Ich denke, die Idee war, die erste Fakultät für die Rückkehr zu haben (n, i, Tatsache);

Aber auch mit diesem Korrekturfaktor und Deiner Kraft wird es nicht funktionieren. Wenn Sie feine Berechnungen durchführen und dann zur Stufe n +1 zurückkehren, können Sie das Ergebnis auf 1 setzen!

Schließlich müssen Sie p und fact in jeder Schleife neu initialisieren.

Meiner Meinung nach ist es besser, die Fakultätsfunktion und die Potenz zum Arbeiten durch Verringern der Werte (von n auf 1) zu schreiben, als von 1 auf n + 1 zuzunehmen. Funktion benötigt nur einen Parameter, es ist viel einfacher (kein i, Fakt oder p)

Hinweis

Löse durch le père

Vorherige Artikel Nächster Artikel

Top-Tipps