此代码是否会产生堆栈溢出?

jos*_*urs 1 language-agnostic stack-overflow recursion

我不小心写了一些代码,其中包含今天看起来的行:

public void fun1(args){
     fun2(args); 
}

public void fun2(args){
     fun1(args);
}
Run Code Online (Sandbox Code Playgroud)

这是在Java中,所以当代码运行时,它会产生堆栈溢出并且代码崩溃.没问题.

但这是基于Java的,我也在其他语言中看到过这种情况(主要是OO或命令式语言).是否有任何语言支持递归,这不会导致堆栈溢出,但可能是不同的错误类型?或者"允许"无限循环无限期运行,也许有足够的内存?

Gre*_*ill 8

是的,具有尾调用优化的语言将避免在这种情况下的堆栈溢出问题.例如,当调用以下函数之一时,以下Scheme代码将无限期执行:

(define (fun1 args)
    (fun2 args))

(define (fun2 args)
    (fun1 args))
Run Code Online (Sandbox Code Playgroud)