it-swarm.dev

什么是导致堆栈溢出的最短代码?

为了纪念Stack Overflow的公开发布,导致堆栈溢出的最短代码是什么?任何语言欢迎。

ETA:只是要明确这个问题,因为我偶尔会看到一个Scheme用户:尾调用“递归”实际上是迭代,任何可以通过合适的编译器相对简单地转换为迭代解决方案的解决方案都不会算一算:-P

ETA2:我现在选择了“最佳答案”;看 这篇文章 的理由。感谢所有贡献的人! :-)

160
Chris Jester-Young

动作脚本3:全部用数组完成......

var i=[];
i[i.Push(i)]=i;
trace(i);

也许不是最小的,但我觉得它很可爱。特别是Push方法返回新的数组长度!

0
defmeta

OCaml的

let rec f l = f [email protected];;

这个有点不同。堆栈上只有一个堆栈帧(因为它的尾递归),但它的输入会一直增长,直到它溢出堆栈。只需使用非空列表调用f(在解释器提示符下):

# f [0];;
Stack overflow during evaluation (looping recursion?).
0
Graphics Noob
int main(void) { return main(); }
0
Daniel Băluţă
main(){
   main();
}

简单和漂亮C.感觉非常直观。

0
N 1.1

VB.Net

Function StackOverflow() As Integer
    Return StackOverflow()
End Function
0
Kibbee

不是很短,但有效! (JavaScript的)

setTimeout(1, function() {while(1) a=1;});
0
Thevs

JavaScript(17字节)

eval(t="eval(t)")

VB脚本(25字节)

t="Execute(t)":Execute(t)
0
st0le

另一个Windows批处理文件:

:a
@call :a
0
Carlos Gutiérrez

D中的元问题:

class C(int i) { C!(i+1) c; }
C!(1) c;

编译时堆栈溢出

0
BCS

哈斯克尔:

main = print $ x 1 where x y = x y + 1
0
jkramer

Ruby(再次):

def a(x);x.gsub(/./){a$0};end;a"x"

已经有很多Ruby解决方案,但我认为我会投入一个正则表达式。

0
finnw
_asm t: call t;
0
Tolgahan Albayrak

Ruby,尽管不是那么简短:

class Overflow
    def initialize
        Overflow.new
    end
end

Overflow.new
0
RFelix

即使它没有真正的堆栈......

brainf * ck 5 char

+[>+]
0
Graphics Noob

蟒蛇:

import sys  
sys.setrecursionlimit(sys.maxint)  
def so():  
    so()  
so()
0
Artur Gaspar

我认为这是我以前从未玩过的作弊;)但是这里有

8086汇编程序:

org Int3VectorAdrress;是作弊吗?

int 3

1个字节 - 或5个字符生成代码,你说什么?

0
Despatcher

在x86汇编中,在中断处理程序的内存中的位置放置除以0指令,除以0!

0
Dennis Ferron

为什么不

mov sp,0

(堆栈长大)

0
mike511

尾调用优化可以通过尾调用来破坏。在共同的LISP中:

(defun f()(1+(f)))
0
Svante

Z80汇编语言......

.org 1000
loop: call loop

这会在1000位置生成3个字节的代码....

1000 CD 00 10

0
Tim Ring

Fortran,13和20个字符

real n(0)
n(1)=0
end

要么

call main
end

第二种情况是依赖编译器的;对于GNU Fortran,需要使用-fno-underscoring进行编译。

(两个计数都包括所需的换行)

0
F'x

Dyalog APL

fib←{
    ⍵∊0 1:⍵
    +/∇¨⍵-1 2
}
0
wash

Prolog

在咨询时,该程序会使SWI-Prolog和Sicstus Prolog崩溃。

p :- p, q.
:- p.
0
Kaarel

C# 中,这将创建一个stackoverflow ...

static void Main()
{
    Main();
}
0
user11039

PostScript so.ps文件中将导致execstackoverflow

%!PS
/increase {1 add} def
1 increase
(so.ps) run
0
Mark Nold