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或命令式语言).是否有任何语言支持递归,这不会导致堆栈溢出,但可能是不同的错误类型?或者"允许"无限循环无限期运行,也许有足够的内存?
是的,具有尾调用优化的语言将避免在这种情况下的堆栈溢出问题.例如,当调用以下函数之一时,以下Scheme代码将无限期执行:
(define (fun1 args)
(fun2 args))
(define (fun2 args)
(fun1 args))
Run Code Online (Sandbox Code Playgroud)