2017-01-31 7 views
-2

Ich versuche ein Programm zu erstellen, das mir die Summe der Serien 1! +2/2! +3/3! ............ n/n gibt ! Hier ist mein Code.Rückgabe eines doppelten Wertes in C++

Jetzt, wenn wir die Summe aus der Funktion sumseries() drucken, wird der korrekte Wert gedruckt. Aber in der nächsten Zeile geben wir die Summe zurück und speichern sie in der z-Variable in der Funktion main(). Und wenn wir versuchen, diesen Wert zu drucken, zeigt er -nan (ind)

Meine Frage ist nicht, wie man dieses Problem löst oder wie man dieses Programm arbeiten lässt. Was ich frage, ist, was dieses Problem im obigen Code verursacht. Warum wird der korrekte Wert nicht zurückgegeben?

+11

Ihr Compiler Warnungen auf höherer Ebene drehen. Es wird dir sofort sagen. Sie haben eine Rekursion, aber Sie kehren nicht durch die gesamte Kette zurück. Oder führen Sie den Code in einem Debugger zeilenweise aus und Sie werden sehen, was passiert. –

+3

Ich wusste nicht, dass es ein Postfix-Inkrement für Doppelgänger gibt. Wer benutzt das? – YSC

+0

Laut [dieser SO-Antwort] (http://stackoverflow.com/a/8561459/5470596) summiert die Verwendung von "double ++" wiederholt Fehler. – YSC

Antwort

4

In Ihrer sumseries Funktion gibt nicht alle Flusssteuerungswege einen Wert zurück.

sollten Sie zumindest schreiben

if (count <= n) 
    return sumseries(sum, count); 

statt

if (count <= n) 
    sumseries(sum, count); 
1

Ihr Compiler eine Warnung geben sollte, oder auch für das Problem einen Fehler. Wenn nicht, bitte die Warnstufe höher stellen.

Sie haben eine rekursive Funktion Sumseries, aber Sie geben keinen Wert aus allen Pfaden, die zum Ende führen. Daher ist der Rückgabewert unbestimmt.

Eine rekursive Funktion kehrt nicht nur einmal zurück, sondern Sie müssen von jedem Schritt zurückkehren. In diesem Fall geben Sie den letzten Wert zurück, aber der vorherige Aufruf der Funktion verwirft ihn. Sie müssen es immer wieder zurückgeben. Daher müssen Sie

return sumseries(sum, count); 

verwenden, um den Wert zum vorherigen Schritt zurückzugeben.

0

Der Kontrollfluss in sumseries() kann sein Ende erreichen und einen undefinierten Wert zurückgeben. Sie müssen solche Situation in Ihrem Code unmöglich machen. Wahrscheinlich wollen Sie diese Anweisung verwenden:

if (count <= n) 
    return sumseries(sum, count); 

statt nur

if (count <= n) 
     sumseries(sum, count); 
Verwandte Themen