it-swarm-pt.tech

Qual é o código mais curto para causar um estouro de pilha?

Para comemorar o lançamento público do Stack Overflow, qual é o código mais curto para causar um estouro de pilha? Qualquer idioma é bem-vindo.

ETA: Só para esclarecer essa questão, já que sou um usuário ocasional do Scheme: "recursão" de chamada final é realmente iteração, e qualquer solução que possa ser convertida em uma solução iterativa relativamente trivialmente por um compilador decente não será ser contado. :-P

ETA2: Eu selecionei agora a “melhor resposta”; veja este post para justificativa. Obrigado a todos que contribuíram! :-)

160
Chris Jester-Young

Actionscript 3: Tudo feito com matrizes ...

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

Talvez não seja o menor, mas acho fofo. Especialmente o método Push retornando o novo comprimento da matriz!

0
defmeta

OCaml

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

Este é um pouco diferente. Há apenas um quadro de pilha na pilha (uma vez que é recursivo de cauda), mas sua entrada continua crescendo até que ela transborda. Basta chamar f com uma lista não vazia como esta (no prompt do intérprete):

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

Simples e agradável C. Parece bastante intuitivo para mim.

0
N 1.1

VB.Net

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

Não é muito curto, mas eficaz! (JavaScript)

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

JavaScript (17 bytes)

eval(t="eval(t)")

Script VB (25 bytes)

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

Por diversão, eu tive que procurar no Motorola HC11 Assembly:

              org           $100
Loop    nop
          jsr            Loop
0
PersistenceOfVision

Outro arquivo de lote do Windows:

:a
@call :a
0
Carlos Gutiérrez

Meta problema em D:

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

estouro de pilha de tempo de compilação

0
BCS

Haskell:

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

Ruby (novamente):

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

Já existem muitas soluções Ruby, mas eu pensei em lançar um regexp por uma boa medida.

0
finnw
_asm t: call t;
0
Tolgahan Albayrak

Ruby, embora não tão curto:

class Overflow
    def initialize
        Overflow.new
    end
end

Overflow.new
0
RFelix

Mesmo que realmente não tenha uma pilha ...

brainf * ck 5 char

+[>+]
0
Graphics Noob

Pitão:

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

Eu acho que é trapaça que eu nunca joguei antes;) mas aqui vai

Montador 8086:

org Int3VectorAdrress; isso é trapaça?

int 3

1 byte - ou 5 caracteres que geram código, o que você diz?

0
Despatcher

No assembly x86, coloque uma instrução de divisão por 0 no local na memória do manipulador de interrupções para divisão por 0!

0
Dennis Ferron

por que não

mov sp,0

(pilha cresce)

0
mike511

A otimização da chamada de cauda pode ser sabotada por não chamada de cauda. No LISP comum:

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

Z80 Assembly language ...

.org 1000
loop: call loop

isso gera 3 bytes de código no local 1000 ....

1000 CD 00 10

0
Tim Ring

Fortran, 13 e 20 caracteres

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

ou

call main
end

O segundo caso é dependente do compilador; para GNU Fortran, ele precisará ser compilado com -fno-underscoring.

(Ambas as contagens incluem novas linhas obrigatórias)

0
F'x

Dyalog APL

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

Prolog

Este programa trava o SWI-Prolog e o Sicstus Prolog quando consultado.

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

Em C #, isso criaria um fluxo de pilha ...

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

Em um arquivo PostScript chamado so.ps, causará execstackoverflow

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