相关疑难解决方法(0)

如何在scala中优化这个短因子函数?(创造50000 BigInts)

我已经比较了scala版本

(BigInt(1) to BigInt(50000)).reduce(_ * _)
Run Code Online (Sandbox Code Playgroud)

到python版本

reduce(lambda x,y: x*y, range(1,50000))
Run Code Online (Sandbox Code Playgroud)

事实证明,scala版本比python版本长了大约10倍.

我猜,一个很大的区别是python可以使用其原生long类型而不是为每个数字创建新的BigInt对象.但scala中有解决方法吗?

optimization scala function factorial lazy-evaluation

14
推荐指数
2
解决办法
2209
查看次数

如何在Scala中修复我的Fibonacci流

我定义了一个返回Fibonacci流的函数,如下所示:

def fib:Stream[Int] = {
  Stream.cons(1,
    Stream.cons(2,
      (fib zip fib.tail) map {case (x, y) => println("%s + %s".format(x, y)); x + y}))
}

功能正常但看起来效率低(参见下面的输出)

scala> fib take 5 foreach println
1
2
1 + 2
3
1 + 2
2 + 3
5
1 + 2
1 + 2
2 + 3
3 + 5
8

所以,看起来该函数从一开始就计算出第n个斐波纳契数.这是对的吗?你会怎么解决它?

scala stream fibonacci

8
推荐指数
2
解决办法
1226
查看次数