gpt4 book ai didi

java - Java 是否支持和优化尾递归调用?

转载 作者:太空狗 更新时间:2023-10-29 22:40:01 24 4
gpt4 key购买 nike

假设我有一个尾递归的递归函数。我想知道这个函数是否会被实现为递归,在堆栈上增长,或者它会被更改为循环(因为它是一个尾递归函数)?

我刚刚读到 Scala 会检测此类调用并对其进行优化,但这是 Scala 专用的东西还是一般的 JVM?

最佳答案

Java 支持尾递归调用,但据我所知,它并没有优化它们。我认为是 Scala 编译器能够做到这一点,而不是 JVM 本身。查看 Scala 中的 @tailrec 注释,了解编译器的更多功能:)

但无论 Java/JVM 是否优化尾递归,您的函数都将比必要的更难优化。

看看这个:

int sum(List<Integer> integers) {
return sum(integers, 0);
}

int sum(List<Integer> integers, int sumSoFar) {
if (integers.isEmpty())
return sumSoFar;
else
return sum(
integers.subList(1, integers.size()),
sumSoFar + integers.get(0)
);
}

看,我已经添加了一个重载的 sum,其中包含到目前为止已计算的总和参数。这样,当您在 else 分支中重复出现时,您不再需要实际的堆栈帧 - 您在递归调用中获得了所有需要的函数参数。

在您的代码段中,只要递归调用,堆栈框架就可能必须存在..

关于java - Java 是否支持和优化尾递归调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20826786/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com