2011-09-24 66 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