2017-03-03 13 views
0

Ich frage mich seit einer Weile (kein Wortspiel beabsichtigt), was ist effizienter zu tun. Diesewhile (true) oder rekursive Funktion?

:

while(true) 
{ 
    //do stuff 
    if(stuffDone) 
     break; 
} 

Oder dieser:

void something() 
{ 
    //do stuff 
    if(!stuffDone) 
     something(); 
} 

Ich habe nicht in der Lage gewesen, etwas zu diesem Thema zu finden, so dass jeder Eingang zu schätzen!

+0

"Efficient" wie? Die machen zwei verschiedene Dinge. Haben Sie beide für Ihre Bedürfnisse gemessen, um zu bestimmen, welche Sie bevorzugen? – David

+0

Es sollte relativ einfach sein, Ressourcen zu finden, die die Probleme/Vorteile beider Ansätze diskutieren. Es hängt wirklich davon ab, was Sie gerade tun und welche Art von Effizienz Sie anstreben. –

+0

Ich würde 'do {do_stuff(); } while (! stuffDone); '. Besser lesbare IMO, und alle Implementierungen sollten der Leistung entsprechen. – Jarod42

Antwort

1

Rekursion hat zur Folge, dass "Stack Overflow" verursacht wird. Rekursion erfordert auch mehr CPU, um eine einzelne Schleife zu erreichen. Beide Methoden sind CPU-intensiv, aber wenn Sie zwischen den beiden Methoden wählen, verwenden Sie die while-Schleife, um einen Absturz des Stack-Überlaufs zu vermeiden.

Häufig diese Art „für Aufgabe wartet abzuschließen“ beschäftigt sich mit asynchronen Themen. A Signal, Mutex oder einige Callback Mechanismus bietet eine CPU-effiziente Mittel zum Warten auf eine Variable den Zustand zu ändern.

0

Die Effizienz hängt von vielen Faktoren ab. Du kannst nicht sagen, dass einer absolut besser ist als der andere. Unterschiedliche Programmiersprachen ergeben nicht die gleichen Ergebnisse. Der Unterschied in der Leistung ist unbedeutend. Sie sollten sich mehr auf die Lesbarkeit des Codes konzentrieren und entscheiden, welche Sie verwenden möchten. Rekursive Funktionen haben im Allgemeinen weniger Codezeilen als While-Schleifen.

Mit diesem gesagt, möchte ich Ihnen sagen, dass While-Loops sind in der Regel schneller.

Hier sind einige interessante Antworten Diskussion zu diesem Thema: https://softwareengineering.stackexchange.com/questions/182314/recursion-or-while-loops