Language agnostic 这段代码总是会产生堆栈溢出吗?

Language agnostic 这段代码总是会产生堆栈溢出吗?,language-agnostic,recursion,stack-overflow,Language Agnostic,Recursion,Stack Overflow,我无意中编写了一些代码,其中包含今天看起来像这样的行: public void fun1(args){ fun2(args); } public void fun2(args){ fun1(args); } 它是用Java编写的,因此当代码运行时,会产生堆栈溢出,代码崩溃。没问题 但这是基于Java的,我在其他语言中也看到过,主要是OO或命令式语言。是否有任何支持递归的语言不会导致堆栈溢出,但可能是不同的错误类型?或者允许无限循环无限期地运行,也许有足够的内存 是的,在

我无意中编写了一些代码,其中包含今天看起来像这样的行:

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

public void fun2(args){
     fun1(args);
}
它是用Java编写的,因此当代码运行时,会产生堆栈溢出,代码崩溃。没问题

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

是的,在这种情况下,使用的语言可以避免堆栈溢出问题。例如,调用以下函数之一时,将无限期执行以下方案代码:

(define (fun1 args)
    (fun2 args))

(define (fun2 args)
    (fun1 args))
是的,在这种情况下,使用的语言可以避免堆栈溢出问题。例如,调用以下函数之一时,将无限期执行以下方案代码:

(define (fun1 args)
    (fun2 args))

(define (fun2 args)
    (fun1 args))

它进入内存的原因是因为运行时跟踪存储局部变量的上下文堆栈。每当您在技术上以类似Java的语言输入一个方法时,每当它遇到一个“{”

所以,基本上,如果你想让它工作,你不需要上下文跟踪。汇编程序似乎是一个很好的候选人。但它也有自己的问题


更好的是,为什么你会想要这样的东西…你可能想重新评估你正在做什么…

它进入内存的原因是因为运行时跟踪一个上下文堆栈,其中存储了本地变量。每当你在技术上用Java(如langua)输入一个方法时,一个新的上下文就会添加到堆栈中ges,每次遇到“{”

所以,基本上,如果你想让它工作,你不需要上下文跟踪。汇编程序似乎是一个很好的候选人。但它也有自己的问题


更好的是,你为什么要这样做……你可能想重新评估你正在做的事情……

如果无限循环不需要每次迭代额外的内存,它并不总是导致崩溃

无限递归并不总是导致崩溃,特别是当它是尾部递归并且取决于编译器/编程语言时


Scheme支持尾部递归。

无限循环并不总是导致崩溃,如果它不需要为每次迭代增加内存

无限递归并不总是导致崩溃,特别是当它是尾部递归并且取决于编译器/编程语言时


Scheme支持尾部递归。

stackless python会允许这样的事情。它可以无限期地执行它!!stackless python会允许这样的事情。它可以无限期地执行它!!这真的只是一个假设问题。我无意中用几种不同的语言编写了上面这样的方法,所有这些方法的结果都是一样的。这真的是太棒了只是一个假设问题。我无意中用几种不同的语言编写了上述方法,结果都是一样的。