2011-09-24 89 views
1

我有一個永遠持續運行的ruby服務,我不知道遞歸的成本是多少。當我CTRL-C一段時間後的服務,我得到印刷以下錯誤:Ruby中的遞歸成本是多少?

^Cff.rb:169:in `sleep': Interrupt 
    from ff.rb:169:in `fetch' 
    from ff.rb:170:in `fetch' 
    from ff.rb:187:in `fetch' 
    from ff.rb:180:in `fetch' 
    from ff.rb:170:in `fetch' 
    from ff.rb:187:in `fetch' 
    from ff.rb:177:in `fetch' 
    from ff.rb:170:in `fetch' 
.... and continue for each recursive call 

這使我不知道這是否有內存的成本,或者如果它最終會失敗?像這樣在Ruby中使用遞歸是不好的?另一種解決方案會更好嗎? TY。

+3

我不認爲「遞歸性」是一個詞。 –

+0

看起來你需要一個循環而不是遞歸調用。遞歸併不意味着永遠跑得更深,而且它不管是Ruby,C還是其他。 – sidyll

+1

@JacobRelkin這是[wiktionary](http://en.wiktionary.org/wiki/recursivity)所以它必須是真的;) –

回答

1

AFIAK,Ruby從不將尾調用遞歸轉換爲循環。如果你繼續遞歸調用一個函數,最終你會用完內存。

+0

可以使YARV支持尾部呼叫優化。請參閱http://stackoverflow.com/questions/824562/does-ruby-perform-tail-call-optimization/824831#824831 –

+0

@Andrew,感謝您的鏈接!謝謝你的回答! – grm