博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JVM原生不支持尾递归优化,但是Scala编译器支持
阅读量:6281 次
发布时间:2019-06-22

本文共 1365 字,大约阅读时间需要 4 分钟。

hot3.png

The JVM doesn’t support TCO natively, so tail recursive methods will need to rely on the Scala compiler performing the optimization.----------"Scala in Depth" 3.5.2

Jvm本身是不支持尾递归优化得,需要编译器支持,而Java编译器不支持,但是Scala支持。写一个简单的计算1到n的和的递归算法验证一下。

public class TestTailRecursion {    private static long sum(long n, long total) {        if (n <= 0) {            return total;        }        return sum(n - 1, total + n);    }    public static void main(String[] args) {        long sum = sum(100000, 0);        System.out.println(sum);    }}

10w(可能每个机器不一样)的时候栈溢出。

object TestTailRecursion {  def sum(n: Long, total: Long): Long = {    if (n <= 0) total    else sum(n - 1, total + n)  }  def main(args: Array[String]) {    val total = sum(10000000, 0)    println(total)  }}

Scala表示毫无压力。

可以讲Scala编译得到的bytecode用JavaDecompiler反编译,看到如下:

import scala.Predef.;import scala.runtime.BoxesRunTime;public final class TestTailRecursion${  public static final  MODULE$;    private TestTailRecursion$()  {    MODULE$ = this;  }    public long sum(long n, long total)  {    for (;;)    {      if (n <= 0L) {        return           total;      }      total += n;n -= 1L;    }  }    public void main(String[] args)  {    long total = sum(10000000L, 0L);    Predef..MODULE$.println(BoxesRunTime.boxToLong(total));  }    static  {    new ();  }}

转载于:https://my.oschina.net/magicly007/blog/308210

你可能感兴趣的文章
“我意识到”的意义
查看>>
淘宝天猫上新辅助工具-新品填表
查看>>
再学 GDI+[43]: 文本输出 - 获取已安装的字体列表
查看>>
nginx反向代理
查看>>
操作系统真实的虚拟内存是什么样的(一)
查看>>
hadoop、hbase、zookeeper集群搭建
查看>>
python中一切皆对象------类的基础(五)
查看>>
modprobe
查看>>
android中用ExpandableListView实现三级扩展列表
查看>>
%Error opening tftp://255.255.255.255/cisconet.cfg
查看>>
java读取excel、txt 文件内容,传到、显示到另一个页面的文本框里面。
查看>>
《从零开始学Swift》学习笔记(Day 51)——扩展构造函数
查看>>
python多线程队列安全
查看>>
[汇编语言学习笔记][第四章第一个程序的编写]
查看>>
android 打开各种文件(setDataAndType)转:
查看>>
补交:最最原始的第一次作业(当时没有选上课,所以不知道)
查看>>
Vue实例初始化的选项配置对象详解
查看>>
PLM产品技术的发展趋势 来源:e-works 作者:清软英泰 党伟升 罗先海 耿坤瑛
查看>>
vue part3.3 小案例ajax (axios) 及页面异步显示
查看>>
浅谈MVC3自定义分页
查看>>