在scala中递归优化?
我自己从scala编译器源代码构建了一个scala编译器。 在编译器的源代码中,有许多尾递归函数/方法。 从其源代码构建scala编译器还需要编译编译器本身的源代码。 如果在编译源代码的过程中添加选项-g:notailcalls
以关闭尾递归优化,那么在运行构建的编译器时会出现一个statck溢出错误。
总而言之,是否有可能在一个大型且复杂的scala程序中有很多递归调用,在编译时会忽略尾递归优化,从而在运行时导致堆栈溢出错误?
当然。 但是请注意,Scala能够确定函数本身是否是递归的,您不需要将@tailrec
注释传递给该函数。
但是,scala无法将合适的函数转换为其尾递归形式。 你必须手动做到这一点,但并不是每个功能都可以这样转换。
链接地址: http://www.djcxy.com/p/80749.html