看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) C 問題(Question): 因為最近在撰寫遞迴,發現執行的時間過於冗長。 上網:項次越高的話,使用迴圈能大幅提高效能。 但因使用方式,還是以遞迴為主。 不經好奇若將遞迴改成static或是marco會更快嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.231.18.229
littleshan:遞迴不一定會比較慢 主要看你怎麼寫 09/03 11:54
littleshan:Fibbonacci若改寫成tail call的型式,和迴圈版一樣快 09/03 11:55
littleshan:然後遞迴不可能改成macro的,static則完全沒差別 09/03 11:56
MOONRAKER:MACRO是要在compile-time就知道遞迴幾次嗎 09/03 12:07
MOONRAKER:賊克這真是太神奇了 09/03 12:08
purpose:你先改一次不就知道了。而且我相信大部分的人只會跟你講 09/03 12:34
purpose:用遞迴加快撰寫程式的速度,不會說加快程式執行的速度 09/03 12:35
a27417332:用樣板遞回,執行期絕對快XD 09/03 12:45
diabloevagto:template metaprogramming 09/03 12:56
L和M大,真是抱歉,當初在想對於常呼叫的Function 是否有什麼機制,能加快運算。忘了marco的用法。 想說是否能減少RUN Time的時間。 我會在c++的時候嘗試使用Template測試,謝謝各位的指點,感謝! 至於C的話,則會繼續在找看看。 ※ 編輯: crazycat2 來自: 36.231.18.229 (09/03 13:44)
springman:通常是以空間換取時間,大多可以與迴圈作法的時間複雜度 09/03 13:57
springman:相同。 09/03 13:57
springman:不過實際上應該還是比較慢。 09/03 13:58
Feis:效率還是要看寫法與編譯器 09/03 14:30
littleshan:那個template是來亂的啦 意思和macro一樣 09/03 15:35
littleshan:另外現代化的compiler都足以把tail call轉成迴圈 09/03 15:36
littleshan:如果沒辦法tail call,表示迴圈版也需要stack輔助 09/03 15:38
littleshan:這麼一來誰快誰慢其實也不一定 09/03 15:38
a27417332:有些東西可以算起來等(?)。不過缺點就是呼叫次數有限 09/03 17:46
a27417332:就有點類似靜態多型,有時候的情況是不需要執行期 09/03 17:47
a27417332:個人是這樣在想啦,最近才剛接觸樣板這塊@@ 09/03 17:47
wuliou:遞迴系統太小很容易爆,迴圈比較沒這問題 09/03 18:33
Feis:wuliou: 會這樣想主要還是因為寫法(或是演算法)的問題 09/04 01:14
Feis:a27417332: 覺得靜態多型的想法在遞迴上的意義是? 09/04 01:18
Feis:a27417332: 此外靜態多型也是個蠻有趣的詞 09/04 01:20
a27417332:比喻啦XD意思就是有些時候是不需要拖延到執行期 09/04 18:17
a27417332:靜態多形是網路上看到的說法,或許我該說CRTP才是@@ 09/04 18:18
a27417332:不過是有些時候,當然也有狀況是拖延到執行期才可能 09/04 18:19