我一直想知道一段時間(沒有雙關語意圖)現在做什麼更有效。while(true)還是遞歸函數?
此:
while(true)
{
//do stuff
if(stuffDone)
break;
}
或者這樣:
void something()
{
//do stuff
if(!stuffDone)
something();
}
我一直沒能找到有關此主題的任何東西,所以任何輸入的感謝!
我一直想知道一段時間(沒有雙關語意圖)現在做什麼更有效。while(true)還是遞歸函數?
此:
while(true)
{
//do stuff
if(stuffDone)
break;
}
或者這樣:
void something()
{
//do stuff
if(!stuffDone)
something();
}
我一直沒能找到有關此主題的任何東西,所以任何輸入的感謝!
遞歸有導致「堆棧溢出」的後果。遞歸也需要更多的CPU來完成單個循環。這兩種方法都是CPU密集型的,但是在兩者之間進行選擇時,請使用while循環來避免堆棧溢出崩潰。
通常,這種「等待任務完成」處理異步主題。 A 信號,互斥體或一些回調機制提供了更高效的CPU等待方式來等待變量的狀態改變。
效率取決於很多因素。你不能說一個人比另一個人更好。不同的編程語言不會給出相同的結果。性能上的差異是無足輕重。您應該更多地關注代碼的可讀性,並決定要使用哪個。遞歸函數通常比while循環更少的代碼行。
有了這個說法,我想告訴你,while循環通常更快。
這裏有一些有趣的答案,討論這個話題: https://softwareengineering.stackexchange.com/questions/182314/recursion-or-while-loops
「高效」怎麼樣?那些做兩件不同的事情。您是否測量了您的需求以確定您的偏好? – David
應該合理地直接找到討論這兩種方法的問題/好處的資源。這實際上取決於你在做什麼以及你瞄準的是哪種類型的效率。 –
我會寫'do {do_stuff(); (!stuffDone);'。更可讀的海事組織,所有實施應該相當於性能。 – Jarod42