这是 my previous question 的后续内容。
我知道我们可以使用流
来生成“pi”(和其他数字)、第n个斐波那契等的近似值。但是我怀疑streams
是执行此操作的正确方法。
主要缺点(据我所知)是内存消耗:例如stream
将保留 i < n 的所有斐波那契数,而我只需要第 n 个斐波那契数。当然,我可以使用 drop
但它使解决方案变得更加复杂。 尾递归
看起来是更适合此类任务的方法。
你觉得怎么样?
最佳答案
如果需要走得快,请轻装上阵。这意味着;避免分配任何不必要的内存。如果您需要内存,请使用可用的快速集合。如果您知道需要多少内存;预分配。对于计算而言,分配绝对是性能 killer 。您的代码可能看起来不再漂亮,但它会运行得很快。
但是,如果您正在使用 IO(磁盘、网络)或任何用户交互,那么分配就显得苍白无力。那么最好将优先级从代码性能转移到可维护性。
关于scala - 迭代过程的流与尾递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8602741/