我正在学习函数式编程(FP)(使用 Scala)。从我最初的学习中得出的一个结论是 FP 严重依赖递归。而且,在 纯洁 FP 中,做迭代工作的唯一方法似乎是编写递归函数。
由于大量使用递归,因此 FP 不得不担心的下一个问题是 StackoverflowExceptions
,这通常是由于长时间的缠绕递归调用造成的。通过引入一些优化(从 Scala v2.8开始,在维护堆栈框架和 @tailrec
注释方面与尾递归相关的优化)来解决这个问题
谁能告诉我为什么递归对功能编程范型如此重要?在函数式编程语言的规范中,如果我们迭代地做一些事情,是否有什么东西被“违反”了?如果是的话,我也很想知道。
PS: 注意,我是函数式编程的新手,所以如果他们解释/回答我的问题,请随时指给我现有的资源。同时我也明白 Scala 特别提供了对迭代工作的支持。