2017-12-06 1 views
-7

Ich versuche einen Zähler zu erstellen. Es zählt jede Operation wie Multiplikation, Addition, Subtraktion, Division. Jedes Mal, wenn ich versuche, den Zähler zu streichen, bleibt er gleich null.C++ - Rekursiver Zähler

Kann jemand irgendein Licht auf das werfen, was ich falsch mache?

Ein Großteil meines Codes fehlt, so dass ich ihn vor anderen Klassenkameraden schützen kann, jedoch habe ich aufgelistet, wie viele Operationen in diesem Abschnitt enthalten sind, wo der Code wäre.

long karatsuba(int num1, int num2, int &counter) 
{ 
if (num1 < 10 || num2 < 10) 
{ 
    counter++ // 1 operation 
    return num1 * num2; 
} 
/* calculates the size of the number */ 
... 4 operations 

/* split the digit sequences about the middle */ 
... 4 operations 

/* 3 calls made to numbers approximately half the size */ 
int z0 = karatsuba(..., ..., counter); 
int z1 = karatsuba(..., ..., counter); 
int z2 = karatsuba(..., ..., counter); 


return ... // 9 operations 
} 
------------------------------------------------------------- 
int main() 
{ 
int counter = 0; 
cout << karatsuba(123, 456, counter) << " " << counter << endl; 

cout << endl; 
system("Pause"); 
return 0; 
} 
+0

Bitte aktuellen, kompilierbaren Code eingeben. Der obige Code weist Syntaxfehler auf. Wo wird "counter" insbesondere deklariert? – wallyk

+0

Wenn der Großteil Ihres Codes * entfernt werden kann * und immer noch den von Ihnen beschriebenen Problemzustand hervorruft, ist es * weit, weit * besser, * das * als vollständige Problemquelle zu veröffentlichen, als unkompilierbare Vermutungen zu veröffentlichen. Und seien Sie nicht überrascht, wenn Sie das tatsächliche Problem beim Reduzieren Ihres Codes finden; es passiert öfter, als Sie vielleicht denken. – WhozCraig

+0

Der Code, den ich entfernt habe, wird nicht benötigt, weil es gut funktioniert. Ich habe diesen Teil der Aufgabe abgeschlossen. Implementieren Sie einfach den Zähler, um jede Operation zu zählen, die nicht funktioniert. – Danielx511

Antwort

2

Das Problem ist, diese Zeile:

cout << karatsuba(123, 456, counter) << " " << counter << endl;

Versuchen Sie stattdessen cout << karatsuba(123, 456, counter); cout << " " << counter << endl;

das Problem cout ist, Graf ist noch 0, wenn es gedruckt wird.

+0

Ich werde das testen! Vielen Dank. – Danielx511

+0

Es hat funktioniert. Vielen Dank. Macht perfekt Sinn. – Danielx511

+0

+1, guter Fang! Vielleicht ist es erwähnenswert, dass es nicht garantiert ist, dass "* count ist immer noch 0, wenn es druckt. *" Dies ist in der Tat undefined Verhalten. Weitere Informationen finden Sie unter [diese Frage] (https://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points). – scohe001