Wie verfolge ich die Rekursionstiefe?

7

Ich habe eine rekursive Funktion, die ich beheben möchte. Ich möchte die Rekursionstiefe ausgeben ... d. Wie oft ruft sich die Funktion selbst auf.

Wenn ich eine statische Variable verwende, die am Anfang der Funktion inkrementiert und unten dekrementiert.

Gibt mir das genau die Tiefenstufe?

%Vor%     
user1001776 19.10.2011, 23:11
quelle

7 Antworten

8
%Vor%     
romaninsh 19.10.2011 23:13
quelle
7

Um es einfacher zu machen und

Wenn Sie Ihre Vorstellungskraft wirklich ausdehnen, könnte dies es dem Compiler erleichtern, einige rekursive Aufrufe zu inline zu bringen und / oder eine Tail-Call-Optimierung im Falle einer Tail-Rekursion durchzuführen. Ich habe keine Beweise, dass dies eine Rolle spielt , aber ich kann mir vorstellen, externe Symbole innerhalb eines Funktionskörpers zu referenzieren, die die Compiler-Optimierung beeinflussen.

Ich schlage vor:

%Vor%     
sehe 19.10.2011 23:14
quelle
5

Nein, möglicherweise nicht, wenn eine Ausnahme ausgelöst wird. Eine bessere (und häufigere) Option ist:

%Vor%     
Mooing Duck 19.10.2011 23:14
quelle
2

Wenn Sie dies nicht-intrusiv tun wollten, können Sie Ihren Compiler tatsächlich bitten, jeden Anruf für Sie zu instrumentieren, z. mit gcc:

%Vor%

Sie müssen mit -finstrument-functions kompilieren, damit dies funktioniert.

    
Flexo 19.10.2011 23:22
quelle
0

Im Allgemeinen möchten Sie eine Tiefenvariable, die außerhalb der rekursiven Funktion definiert ist, für die Zwecke der Threadsicherheit und das Drucken von außerhalb dieser Funktion inkrementieren.

Hier ist ein einfaches faktorielles Beispiel, das es demonstriert:

%Vor%

Ausgabe:

%Vor%     
Alexey Frunze 19.10.2011 23:53
quelle
0

In einem einzigen Thread-Kontext wird es funktionieren.

    
André Puel 19.10.2011 23:13
quelle
-1

Ja, es sollte funktionieren. Ich sehe keine Probleme damit.

    
Ravi Bhatt 19.10.2011 23:14
quelle

Tags und Links