2014-02-26 5 views
12

Auf GCC HandbuchWas bedeutet "Geschwisteranrufe"?

-foptimize-Geschwister-Anrufe

optimieren Geschwister und rekursive Endaufruf.

weiß ich rekursive Aufrufe Schwanz, zum Beispiel

int sum (int n) {return n == 1? 1: n + Summe (n-1); }

Was aber bedeutet Geschwisteranrufe?

+0

wie '{f(); G(); } ' –

+11

Das ist keine Tail-Rekursion. – delnan

+1

[Erster Google-Treffer] (http://www.drdobbs.com/tackling-c-tail-calls/184401756) hat anscheinend einige Informationen – Angew

Antwort

4

Es muss so etwas wie diese:

int ispair(int n) { return n == 0 ? 1 : isodd(n-1); } 
int isodd(int n) { return n == 0 ? 0 : ispair(n-1); } 

Im Allgemeinen, wenn der Funktionsaufruf der letzte Satz ist, dann kann es durch einen Sprung ersetzt werden.

void x() { ......; y(); } 

In diesem Fall y() kann durch einen Sprung (oder eine Inline-Funktion) anstelle der Verwendung eines Standard-Funktionsaufruf ersetzt.

+1

Wie unterscheidet sich das von Tail-Call-Optimierung? – user833771