相关疑难解决方法(0)

scala中的递归非常必要吗?

在课程scala教程中,大多数示例都使用自上而下的迭代.部分地,正如我所看到的,迭代用于避免for/while循环.我来自C++,对此感到有些困惑.

迭代选择for/while循环吗?它在生产中是否实用?堆栈溢出的风险是什么?效率怎么样?自下而上动态编程怎么样(特别是当它们不是尾部重复时)?

另外,我应该使用更少的"if"条件,而是使用更多"case"和子类?

recursion functional-programming scala

11
推荐指数
3
解决办法
3747
查看次数

是否有可能在Java 8中创建由递归定义的惰性(更好的无限)集合?

我可以创建一个递归闭包:

static IntUnaryOperator fibo;
fibo = 
    (i) -> 
    i<2 ? 1 : fibo.applyAsInt(i-1)+ fibo.applyAsInt(i-2);
Run Code Online (Sandbox Code Playgroud)

但当然,它只是作为一个例子.相反,如果我创建了一个惰性/无限列表/流,则可以以非常好的方式使用递归:不必多次计算任何成员.

我想到了以下结构:

IntStream fi;
fi=IntStream.iterate(0, i -> fi[i-1]+fi[i-2]);
Run Code Online (Sandbox Code Playgroud)

但是那样它就行不通了 - 我无法通过索引从流中获取一个项目.另一个问题是,如果我以后再沿着流,它将被消耗,我不能重复使用它.如果我将流复制到List,它就不再是懒惰了.

因此,我需要一些我可以通过索引解决的构造.作为fibo(i).

编辑.显然,解决方案不能是流,因为流不能使用两次.我不想在每次调用F(i)时重复所有计算.

java recursion closures java-8 java-stream

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

在Scala中编写Fibonacci函数的最快方法是什么?

我已经从Scala中看到了Scala中Fibonacci函数的一些实现,从一个非常简单的实现更复杂的函数.

我不完全确定哪一个是最快的.我倾向于使用memoization的那些更快,但我想知道为什么Scala没有本机的memoization.

任何人都可以启发我最好,最快(最干净)的方法来编写斐波纳契函数吗?

recursion scala fibonacci

7
推荐指数
4
解决办法
1万
查看次数

如何使用FS2在Scala中实现递归Fibonacci序列?

在尝试熟悉FS2时,我遇到了一个使用Scala集合的Stream 的漂亮的递归实现,并且认为我在FS2中尝试它:

  import fs2.{Pure, Stream}
  val fibs: Stream[Pure, Int] = Stream[Pure, Int](0) ++ fibs.fold[Int](1)(_ + _)
  println(fibs take 10 toList) // This will hang
Run Code Online (Sandbox Code Playgroud)

FS2中出现这种情况的原因是什么,以及获得类似工作解决方案的最佳方法是什么?

scala stream fs2

3
推荐指数
1
解决办法
438
查看次数