假设我有一个尾递归的递归函数.
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中看到的两种范围时遇到了困难:
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 = 3和g = 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)