scala - 迭代过程的流与尾递归

标签 scala stream tail-recursion

这是 my previous question 的后续内容。

我知道我们可以使用来生成“pi”(和其他数字)、第n个斐波那契等的近似值。但是我怀疑streams 是执行此操作的正确方法。

主要缺点(据我所知)是内存消耗:例如stream 将保留 i < n 的所有斐波那契数,而我只需要第 n 个斐波那契数。当然,我可以使用 drop 但它使解决方案变得更加复杂。 尾递归看起来是更适合此类任务的方法。

你觉得怎么样?

最佳答案

如果需要走得快,请轻装上阵。这意味着;避免分配任何不必要的内存。如果您需要内存,请使用可用的快速集合。如果您知道需要多少内存;预分配。对于计算而言,分配绝对是性能 killer 。您的代码可能看起来不再漂亮,但它会运行得很快。

但是,如果您正在使用 IO(磁盘、网络)或任何用户交互,那么分配就显得苍白无力。那么最好将优先级从代码性能转移到可维护性。

关于scala - 迭代过程的流与尾递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8602741/

相关文章:

scala - Scala中的提升功能

algorithm - 来自连续流的等概率随机数

lisp - 对数字 u 和列表 x 求和的方案函数 u+x1+x2

java - 哪个代码效率更高?

java - 第二次调用时 JSch 不提供输出

c - 尾递归调用(C入门加书本例子)

scala - 从 socko 迁移到 akka-http websockets

mongodb - 带 lift-json 的默认案例类参数

mysql - Scala Spark - For 数据帧中的循环并比较日期

android - 如何在 Android 的 Mediaplayer 中显示编码的视频文件?