小编use*_*853的帖子

java支持并优化尾递归调用吗?

假设我有一个尾递归的递归函数.

System.out.println( sum(Arrays.asList(0, 1, 2, 3, 4, 5)) );

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

我想知道这个函数sum是否会在堆栈上增长,还是会被改为循环(因为它是一个尾递归函数)?

我刚刚读到Scala检测到这样的调用并对其进行优化但是这只是一个Scala专用的东西还是JVM?

java optimization recursion jvm scala

17
推荐指数
2
解决办法
5006
查看次数

在Java中命名两种范围

我在命名我在Java中看到的两种范围时遇到了困难:

class Fun {
    int f = 1;
    void fun() {
        int f = 2;
        while(true){
            int f = 3;
            int g = 1;
        }
        int g = 2;
    }
}
Run Code Online (Sandbox Code Playgroud)

案件主要是f = 3g = 2;

一个while语句不引入新的范围,所以我不能创建一个名为而局部变量f.但是如果我创建一个名为的局部变量,g那么我可以在循环之后"重新创建"它.为什么?我知道它不再可访问,但如果编译器检查可访问性,那么它几乎检查范围.

所以我想知道这里的交易是什么,这些概念叫做什么?它与C++中的相同吗?


我只是设法安装g ++并自己试了一下:

#include <iostream>
using namespace std;

int main(){
    int f = 0;
    for(int i=0; i<1; i++){
        int f = 1;
        cout << f << endl;
        {
            int f = 2;
            cout …
Run Code Online (Sandbox Code Playgroud)

c++ java scope

11
推荐指数
1
解决办法
176
查看次数

标签 统计

java ×2

c++ ×1

jvm ×1

optimization ×1

recursion ×1

scala ×1

scope ×1