2017-03-03 58 views
0

我一直想知道一段時間(沒有雙關語意圖)現在做什麼更有效。while(true)還是遞歸函數?

此:

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

或者這樣:

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

我一直沒能找到有關此主題的任何東西,所以任何輸入的感謝!

+0

「高效」怎麼樣?那些做兩件不同的事情。您是否測量了您的需求以確定您的偏好? – David

+0

應該合理地直接找到討論這兩種方法的問題/好處的資源。這實際上取決於你在做什麼以及你瞄準的是哪種類型的效率。 –

+0

我會寫'do {do_stuff(); (!stuffDone);'。更可讀的海事組織,所有實施應該相當於性能。 – Jarod42

回答

1

遞歸有導致「堆棧溢出」的後果。遞歸也需要更多的CPU來完成單個循環。這兩種方法都是CPU密集型的,但是在兩者之間進行選擇時,請使用while循環來避免堆棧溢出崩潰。

通常,這種「等待任務完成」處理異步主題。 A 信號,互斥體或一些回調機制提供了更高效的CPU等待方式來等待變量的狀態改變。

0

效率取決於很多因素。你不能說一個人比另一個人更好。不同的編程語言不會給出相同的結果。性能上的差異是無足輕重。您應該更多地關注代碼的可讀性,並決定要使用哪個。遞歸函數通常比while循環更少的代碼行。

有了這個說法,我想告訴你,while循環通常更快

這裏有一些有趣的答案,討論這個話題: https://softwareengineering.stackexchange.com/questions/182314/recursion-or-while-loops