Programa mais curto que gera o erro StackOverflow [fechado]


75

Escreva um programa que gere um erro StackOverflow ou o equivalente no idioma usado. Por exemplo, em java , o programa deve lançar java.lang.StackOverflowError.

Você não tem permissão para definir uma função que se chama ou uma nova classe (exceto a que contém mainem java). Deve usar as classes da linguagem de programação selecionada.

E não deve lançar o erro explicitamente.


4
Eu não entendo "usar as classes da linguagem de programação selecionado"
Príncipe John Wesley

3
Tudo bem definir uma função que chama função interna como esta def s{def t=s;t}?
Prince John Wesley

12
Na maioria dos idiomas, as classes são apenas um tipo especial de estrutura de dados, não o centro do universo. Muitos nem têm uma coisa dessas.
deixou de girar no sentido anti-horáriowis

1
O engraçado aqui é que as linguagens que exigem eliminação da recursão da cauda (e implementações que a suportam quando as linguagens não a exigem) - que são realmente muito melhores - estão em desvantagem. A resposta do TwiNight está vinculada à versão existente no Stack Overflow desde os primeiros dias.
dmckee

1
No java doc: Lançado quando ocorre um estouro de pilha porque um aplicativo se repete muito profundamente. docs.oracle.com/javase/6/docs/api/java/lang/…
jsedano 9/13

Respostas:


90

Befunge, 1

Eu não conheço Befunge, mas ...

1

Stack overflow code golf


21
Explicação: 1 é um literal numérico que é empurrado para a pilha quando encontrado. No Befunge, o fluxo de controle gira até encontrar um @para finalizar o programa.
histocrat

6
Eu não sabia que havia essa pergunta no StackOverflow. Eu procurei apenas neste site antes de postar.
É verdade macia

31
Estou levemente lisonjeado por ver minha resposta aqui.
Patrick

4
Isso funciona em> <> também.
Cruncher

49

Python (2.7.3), 35 caracteres

import sys
sys.setrecursionlimit(1)

Essa operação em si é bem-sucedida, mas tanto o script quanto o interativo serão lançados imediatamente RuntimeError: 'maximum recursion depth exceeded'como consequência.

Inspirado pela resposta de elssar.


Pensei em colocar isso como minha solução, mas não tinha certeza se o erro poderia ser considerado um estouro de pilha. Embora, essencialmente, é isso que é, certo?
elssar

2
@elssar: Eu acho que existem duas maneiras de transbordar a pilha: aumentar a parte usada da pilha ou diminuir a parte não utilizada da pilha. Se você imaginar um balde cheio de água, poderá transbordá-lo adicionando mais água, mas também pode transbordá-lo encolhendo o balde.

19

Coq

Compute 70000.

70000é apenas açúcar sintático para S (S ( ... (S O) ...))com 70000 S's. Eu acho que é o verificador de tipos que causa o estouro da pilha.

Aqui está um aviso impresso antes da execução do comando:

Warning: Stack overflow or segmentation fault happens when working with large
numbers in nat (observed threshold may vary from 5000 to 70000 depending on
your system limits and on the command executed).

2
Isso pode deixá-lo pensar Coq é uma linguagem incrivelmente burra ... engraçado ...
deixou de girar counterclockwis

1
@leftaroundabout Na verdade não. O tipo Nat é um número peano no nível de tipo que deve agir como se fosse uma lista vinculada.
FUZxxl

1
@ FuZxxl: meu comentário não foi feito para ironicamente. Decidir por si mesmo se você quiser incluir a lógica clássica em que a sentença, ou preferem ficar construtiva ...
deixou de girar counterclockwis

2
@leftaroundabout Oops ... desculpe. Eu esqueci que o analisador de remarcação sempre come aquelas boas tags de "ironia".
FUZxxl

19

Java - 35

class S{static{new S();}{new S();}}

O OP não disse novas classes? Eu não vejo um public static void mainlá dentro. Ou estou apenas falhando em entender Java?
Braden Best

4
@ B1KMusic Não há novas classes, há apenas uma classe (S). O código usa um inicializador estático, lança o SO antes que a jvm descubra que não há método principal. Funciona com o java 6.
aditsu

1
Eu entendo o bloco estático. Mas qual é o próximo bloco?
Nicolas Barbulesco

1
@NicolasBarbulesco Esse é um bloco inicializador, é executado quando você constrói uma nova instância.
Aditsu

1
@LuigiCortese eu acho que só funciona com java 6 ou mais
aditsu

19

Javascript 24 caracteres

Resposta dependente do navegador (deve ter acesso a apply):

eval.apply(0,Array(999999))
  • eval foi o nome de função global mais curto que eu pude encontrar (alguém sabe de um que seja mais curto?)
  • applynos permite converter uma matriz em parâmetros de função, o primeiro parâmetro sendo o contexto da função ( this)
  • Array(999999)criará uma matriz com o comprimento listado. Não tenho certeza qual é o número máximo de argumentos, mas é menor que isso e mais que99999

IE9:

SCRIPT28: Out of stack space 
SCRIPT2343: Stack overflow at line: 20 

Chrome 24:

Uncaught RangeError: Maximum call stack size exceeded 

FireFox 18

RangeError: arguments array passed to Function.prototype.apply is too large

Nota - Devido à natureza de thread único do javascript, loops infinitos acabam bloqueando a interface do usuário e nunca lançando uma exceção.

while(1);
for(;;);

Nenhum deles se qualifica.

Atualização - reduz três caracteres:

eval.apply(0,Array(1e7))

MDN diz que evalé o mais curto.
Peter Taylor

5
eval.apply(0,Array(1e6))economiza 3 caracteres, você pode ir 9e9sem custo
ThinkChaos

1
applyé um recurso padrão do ECMAScript. Não há nada dependente do navegador. A menos que você esteja falando de navegadores realmente antigos, mas isso não funcionaria no hipotético Netscape 2 de applyqualquer maneira, porque a Arrayclasse não existe no Netscape 2.
Konrad Borowski

1
novo mais curto no ES6:eval(...Array(9e9))
Patrick Roberts

1
Provavelmente não padrão, lança no Chrome a partir do console. dir.apply(0,Array(1e7));
Paul J

17

Python 2.7 (12 caracteres)

exec('{'*99)

resulta em um «s_push: estouro de pilha do analisador»


4
Eu receboSyntaxError: unexpected EOF while parsing
Martin Thoma

1
Com exec('{'*101)eu receboMemoryError
Martin Thoma

4
Em python2, execé uma afirmação, então você pode apenas usar exec'{'*999(99 parece não ser suficiente)
gnibbler

Você precisa de pelo menos 100 para acionar um MemoryError. E esse ≠ stack overflow
noɥʇʎԀʎzɐɹƆ 12/09/16

13

Mathematica, 4 caracteres

x=2x

$ RecursionLimit :: reclim: profundidade de recursão de 1024 excedida. >>


1
"Você não pode definir a função que se chama"
Tomas

13
Isso não é uma função, é uma variável (a menos que não seja como ela se parece).
AMK

Você pegou minha ideia.
PyRulez

12

Clojure, 12 caracteres

(#(%%)#(%%))

Executando na repl:

user=> (#(%%)#(%%))
StackOverflowError   user/eval404/fn--407 (NO_SOURCE_FILE:1)

Isso me lembra a expressão de cálculo lambda (\x.xx)(\x.xx), mas não conheço o clojure o suficiente para ter certeza se é isso que está acontecendo. Também não vejo por que a expressão mencionada resultaria em um estouro de pilha, então talvez você esteja fazendo alguns truques com o combinador Y? Esta resposta me interessa e uma explicação seria legal.
Zwei

12

Java - 113 caracteres

Eu acho que isso permanece dentro do espírito da regra "sem métodos de auto-chamada". Ele não faz isso explicitamente e ainda passa por uma construção da linguagem Java.

public class S {
    public String toString() {
        return ""+this;
    }
    public static void main(String[] a) {
        new S().toString();
    }
}

Versão condensada:

public class S{public String toString(){return ""+this;}public static void main(String[] a){new S().toString();}}

9
Bem, ""+thisna verdade ""+this.toString(), então o método se autodenomina.
É verdade macia

1
@TrueSoft Certamente java lança um StringBuilderobjeto lá. toStringprovavelmente será chamado de lá.
triturador

1
No momento em que o compilador e o otimizador são concluídos, o toString()método acaba sendopublic java.lang.String toString() { return this.toString(); }
Jonathan Callen 23/02

12

C, 19 bytes

main(){int i[~0u];}

4
@ Thomas Sim, é um estouro de pilha em qualquer máquina em que variáveis ​​locais estão alocadas na pilha. Como a linguagem C não tem conceito de indicação de estouro de pilha (é um comportamento indefinido; um deles se manifesta como um segfault), isso se encaixa no requisito original.
Jens

OK, desculpe, aceito.
Tomas

3
main.c:1:16: error: size of array 'i' is negativepara mim no gcc 4.8.1. A versão não assinada main(){int i[~0U];}funciona.
CSQ

Não funciona para mim depois que eu configurei manualmente uma pilha de 4 GB.
FUZxxl

@FUZxxl Interessante; suas entradas são de 32 bits? Se assim sizeof(i)for , é de 16GB. O uso de um sufixo ulou ullfaz diferença? Alguns sistemas comprometem demais a memória e somente travam se a memória for gravada.
Jens

10

GolfScript (8 caracteres)

{]}333*`

Resultado:

$ golfscript.rb overflow.gs 
golfscript.rb:246:in `initialize': stack level too deep (SystemStackError)
from /home/pjt33/bin/golfscript.rb:130:in `new'
from /home/pjt33/bin/golfscript.rb:130:in `ginspect'
from /home/pjt33/bin/golfscript.rb:130:in `ginspect'
from /home/pjt33/bin/golfscript.rb:130:in `map'
from /home/pjt33/bin/golfscript.rb:130:in `ginspect'
from /home/pjt33/bin/golfscript.rb:130:in `ginspect'
from /home/pjt33/bin/golfscript.rb:130:in `map'
from /home/pjt33/bin/golfscript.rb:130:in `ginspect'
 ... 993 levels...
from (eval):4
from /home/pjt33/bin/golfscript.rb:293:in `call'
from /home/pjt33/bin/golfscript.rb:293:in `go'
from /home/pjt33/bin/golfscript.rb:485

Basicamente, isso cria uma estrutura de dados muito aninhada e transborda a pilha ao tentar transformá-la em uma sequência.


Para mim, isso não gera um erro, mas gera #[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[""]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]]]]]]]]]]] (and so on, output too long for comments)
ProgramFOX

@ProgramFOX, haverá algum valor que você poderá substituir 333e ele quebrará. 333foi o menor valor que quebrou para mim, mas se você tiver uma versão diferente do Ruby (ou talvez a mesma versão em um sistema operacional diferente, pelo que sei), ele poderá lidar com um número diferente de quadros de pilha antes de transbordar.
Peter Taylor

1
Quebra 3192 na minha máquina, então 6.?ainda funciona sem adicionar caracteres.
Dennis

10

montagem x86, sintaxe NASM, 7 bytes

db"Pëý"

"Pëý" é 50 EB FD em hexadecimal e

_loop:
push eax
jmp _loop

na montagem x86.


8

Ruby, 12

eval"[]"*9e3

SystemStackError: stack level too deep

Presumivelmente, depende do sistema, mas você pode adicionar ordens de magnitude aumentando o último dígito (não recomendado).

Editar para explicação: Da mesma forma que em alguns outros exemplos, isso cria uma série de [][][]... repetidas 9000 vezes e depois a avalia: a mais à direita []é analisada como uma chamada de função para as demais, e assim por diante. Se realmente chegasse ao começo, lançaria um ArgumentError porque []é um objeto com um []método que requer um argumento, mas minha máquina gera um erro um pouco antes que a pilha ultrapasse nove mil.


hmm ... travou IRB: P
Maçaneta da porta

Qual versão? ruby1.9.2 lança "ArgumentError: número errado de argumentos (0 para 1..2)".
manatwork

Encontrou um antigo ruby1.8.7. Lá, o código publicado funciona como descrito.
manatwork

Estranho, ele funciona nos meus 1.8.7, 1.9.2 e 1.9.3.
histocrat

Eu teria dito #def f;f;end;f
EMBLEM

8

Rebol (11 caracteres)

do s:[do s]

Rendimentos:

>> do(s:[do s])    
** Internal error: stack overflow
** Where: do do do do do do do do do do do do do do do do 
do do do do do do do do do do do do do do do do do do do
do do do do do do do do do do do do do do do do do do do 
do do do do do do do do do do do do do do do do do do do
do do do do do do do do do do do do do do do do do do do
do do do do do do do do do do do do do do do do do do do
do do do do do do do do do do do do do do do do do do do
do do do do do do do do do do do do do do do do do do do
do do do do do do do do do do do do do do do do do do do
do do do do do do do do do do do do do do do do do do do
do do do do do do do do do do do do...

Embora o Rebol tenha funções, fechamentos e objetos ... isso não define nenhum deles. Ele define uma estrutura de dados, que no paradigma código como dados pode ser tratada como código usando DO.

Podemos investigar a questão do "o que é S" com o REPL:

>> s: [do s]
== [do s]

>> type? s
== block!

>> length? s
== 2

>> type? first s
== word!

>> type? second s
== word!

O DO nunca transforma isso em uma função, ele chama o avaliador no ambiente atual da estrutura.


1
+1 ... Eu não tinha notado que minha resposta estava definindo uma função e isso era contrário às regras, mas editei minha resposta para usar DO ... então percebi que você já havia enviado essa resposta. Acabei de excluir o meu, mas desde que escrevi por que isso não está definindo um objeto / função / fechamento, pensei em colocar a explicação na sua. Também acho que o que fazer é engraçado e vale a pena incluir. :-) Espero que esteja bem!
Dr. Rebmu

7

C, 35 caracteres

main(){for(;;)*(int*)alloca(1)=0;}

Por que armazenar algo no espaço atribuído?
Peter Taylor

1
Neste caso, é impossível para resolver este problema em C.
FUZxxl

3
@dmckee, nem todas as falhas de segmentação são excedentes da pilha, mas eu diria que sim, pois é o resultado de exceder a capacidade da pilha.
Ugoren

1
@dmckee, alloca aloca a partir da pilha.
Ugoren

1
@ PeterTaylor: Provavelmente depende da implementação, mas no meu caso alloca(1)é basicamente traduzido para sub $1, %espque a pilha não seja tocada.
Job

7

Lisp comum, 7 caracteres

#1='#1#

Linda ... Eu estava planejando usar #1=(#1#)para o terminal e (print #1=(#1#)), mas sua solução é muito melhor.
protist

Na verdade, isso não excede o tempo de leitura, apenas quando você tenta imprimi-lo. Além da diferença de 1 caractere, a sua não é melhor.
Protist

Você está certo, apenas editei isso. Não tenho certeza se existe uma maneira de causar um estouro no tempo de leitura.
Erik Haliewicz

. Na verdade, # # 1 = '# 1 # provoca uma sobrecarga :-)-tempo de leitura
Erik Haliewicz

7

Python - 11 caracteres

exec'('*999

>>> exec'('*999
s_push: parser stack overflow
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
MemoryError

Solução muito inteligente.
Mbomb007

7

Calculadora Casio, 11 teclas pressionadas

É muito difícil contar bytes / tokens nesse "idioma" - forneci o número de pressionamentos de tecla necessários, excluindo Shift, Alpha (a segunda tecla Shift) e = no final - isso certamente se encaixa em 1 byte por pressionamento de tecla.

Testado no fx-85GT PLUS , que é uma calculadora científica padrão, não gráfica e "não programável". Outros modelos irão funcionar.

Apenas empilhe 11 raízes de cubo:

3√ 3√ 3√ 3√
3√ 3√ 3√ 3√
3√ 3√ 3√

Ele nem dá um erro de sintaxe sobre o número ausente na raiz quadrada.

Isso não parece funcionar com raízes quadradas.

Como alternativa, repita cos( 31 vezes.

Resultado

Stack ERROR

[AC]  :Cancel
[<][>]:Goto

Eu acredito que isso se qualifica como um estouro de pilha. A pilha parece ser pequena ...


Eu sempre pensei que era chamado de erro de pilha porque você "empilhadas" muitas raízes: P
FlipTack

Minha calculadora Canon apresenta um erro de pilha com praticamente qualquer operador (excluindo pelo menos +, -, * e /) se for repetido 25 vezes ou mais. Por exemplo, isso causa erro de pilha (sem erro de sintaxe):(((((((((((((((((((((((((
Steadybox

7

FORTH, 13 bytes

BEGIN 1 AGAIN

excede a pilha de valores


: X X ; X(9) deve estourar a pilha de retorno
AMK 18/01

não vai funcionar (X não está definido ao definir a chamada e isso é um auto de referência / recursão
catraca aberração

@ratchetfreak, essas palavras de controle só podem ser usadas em um estado de compilação; portanto, elas precisam ser agrupadas em uma :... ;definição de palavra. Isso adiciona pelo menos 6 caracteres, além de pelo menos mais 2 para executar como um programa. Você pode ser capaz de fazê-lo mais curto, mas aqui está um exemplo: : F BEGIN 1 AGAIN ; F. Sugiro isso porque a pergunta é: "Escreva um programa". De qualquer forma, você recebeu um voto positivo pela Forth, independentemente da contagem de caracteres! :-)
Darren Stone

6

Postscript, 7

{1}loop

Por exemplo.

$ gsnd
GPL Ghostscript 9.06 (2012-08-08)
Copyright (C) 2012 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
GS>{1}loop
Error: /stackoverflow in 1
Operand stack:
   --nostringval--
Execution stack:
   %interp_exit   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   %loop_continue   --nostringval--   --nostringval--   false   1   %stopped_push   .runexec2   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push   --nostringval--   --nostringval--   %loop_continue
Dictionary stack:
   --dict:1168/1684(ro)(G)--   --dict:0/20(G)--   --dict:77/200(L)--
Current allocation mode is local
Last OS error: No such file or directory
Current file position is 8
GS<1>


6

LaTeX: 8 caracteres

\end\end

Este é o mesmo código usado nesta resposta . Essencialmente, a \endmacro expande-se várias vezes, resultando em um estouro de pilha: TeX capacity exceeded, sorry [input stack size=5000]. Uma explicação mais detalhada pode ser encontrada aqui .


5

PHP 5.4, 33 caracteres

for($n=1e5;$n--;)$a=(object)[$a];

Isso causa um estouro de pilha quando os objetos stdClass aninhados são destruídos automaticamente:

$ gdb -q php
Reading symbols from /usr/bin/php...(no debugging symbols found)...done.
(gdb) set pagination 0
(gdb) r -nr 'for($n=1e5;$n--;)$a=(object)[$a];'
Starting program: /usr/bin/php -nr 'for($n=1e5;$n--;)$a=(object)[$a];'
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
0x00000000006debce in zend_objects_store_del_ref_by_handle_ex ()
(gdb) bt
#0  0x00000000006debce in zend_objects_store_del_ref_by_handle_ex ()
#1  0x00000000006dee73 in zend_objects_store_del_ref ()
#2  0x00000000006a91ca in _zval_ptr_dtor ()
#3  0x00000000006c5f78 in zend_hash_destroy ()
#4  0x00000000006d909c in zend_object_std_dtor ()
#5  0x00000000006d9129 in zend_objects_free_object_storage ()
#6  0x00000000006dee53 in zend_objects_store_del_ref_by_handle_ex ()
#7  0x00000000006dee73 in zend_objects_store_del_ref ()
#8  0x00000000006a91ca in _zval_ptr_dtor ()
#9  0x00000000006c5f78 in zend_hash_destroy ()
#10 0x00000000006d909c in zend_object_std_dtor ()
#11 0x00000000006d9129 in zend_objects_free_object_storage ()
[...]
#125694 0x00000000006dee53 in zend_objects_store_del_ref_by_handle_ex ()
#125695 0x00000000006dee73 in zend_objects_store_del_ref ()
#125696 0x00000000006a91ca in _zval_ptr_dtor ()
#125697 0x00000000006c5f78 in zend_hash_destroy ()
#125698 0x00000000006d909c in zend_object_std_dtor ()
#125699 0x00000000006d9129 in zend_objects_free_object_storage ()
#125700 0x00000000006dee53 in zend_objects_store_del_ref_by_handle_ex ()
#125701 0x00000000006dee73 in zend_objects_store_del_ref ()
#125702 0x00000000006a91ca in _zval_ptr_dtor ()
#125703 0x00000000006c4945 in ?? ()
#125704 0x00000000006c6481 in zend_hash_reverse_apply ()
#125705 0x00000000006a94e1 in ?? ()
#125706 0x00000000006b80e7 in ?? ()
#125707 0x0000000000657ae5 in php_request_shutdown ()
#125708 0x0000000000761a18 in ?? ()
#125709 0x000000000042c420 in ?? ()
#125710 0x00007ffff5b6976d in __libc_start_main (main=0x42bf50, argc=3, ubp_av=0x7fffffffe738, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffe728) at libc-start.c:226
#125711 0x000000000042c4b5 in _start ()

2
+1 para o que deve ser a segunda aparição do PHP no CodeGolf!
precisa

5

Q / k (16 caracteres)

Não tenho certeza se isso está dentro do espírito do desafio, mas não acho que ele viole as regras:

s:{f`};f:{s`};f`

É uma pena que o C # exija muita digitação, você inspirou minha resposta!
Andrew Gray

5

Um monte no mesmo estilo:

Python, 30

(lambda x:x(x))(lambda y:y(y))

Javascript, 38

(function(x){x(x)})(function(y){y(y)})

Lua, 44

(function(x) x(x) end)(function(y) y(y) end)

Em Python x=lambda y:y(y);x(x)é mais curto (20 caracteres). Esta função não é recursiva. x chama qualquer função passada como argumento.
AMK

Ruby 2.0 -->x{x[x]}[->y{y[y]}]
John Dvorak

Mathematica#@#&[#@#&]
alephalpha

Você está apenas usando recursão, por que não fazer exatamente isso, por exemplo, em JS: (function x () {x ()}) ()?
xem 01/01

Os requisitos do @xem dizem que não há recursão, é por isso.
Danny

5

C #: 106 86 58 46 32 28

32 : Os Getters podem facilitar sua máquina em C #:

public int a{get{return a;}}

1
Não há necessidade de setterpublic int a {get{return a;}}
Mike Koder

3
Isso viola a regra "Você não tem permissão para definir uma função que se chama". É certo que está escondido atrás do açúcar de sintaxe, mas ainda está faltando o objetivo do desafio.
22413 Peter Peter Taylor

Adicionar o setter contorna um pouco a regra, porque agora você tem duas funções se chamando. Mas eu me pergunto: isso ainda viola as intenções do OP por trás desse desafio?
Andrew Gray

1
A idéia que eu entendo é encontrar alguma recursão aninhada excessivamente no intérprete ou na API padrão da linguagem. Isso pode não ser muito fácil em C #.
Peter Taylor

1
Por que "sequência pública"? "int" funciona da mesma maneira:int a { get { return a; } }
NPSF3000

5

INTERCAL, 12 bytes

(1)DO(1)NEXT

Explicação:

NEXTé a versão da INTERCAL de uma chamada de sub-rotina (ou, pelo menos, a mais próxima que você pode chegar). Empurra a posição atual para oNEXT pilha e salta para o rótulo fornecido.

No entanto, se o NEXTcomprimento da pilha exceder 80, você obtém o que é praticamente a versão INTERCAL de um estouro de pilha:

ICL123I PROGRAM HAS DISAPPEARED INTO THE BLACK LAGOON
    ON THE WAY TO 1
        CORRECT SOURCE AND RESUBNIT

Experimente em Ideone. .


6
"DESAPARECEU NA LAGOA NEGRA" o que é isso, ArnoldC?
Addison Crump

5

Mornington Crescent, 139 133

Take Northern Line to Bank
Take Circle Line to Temple
Take Circle Line to Temple
Take Circle Line to Bank
Take Northern Line to Angel

4

Montagem X86 (AT&T), 33 caracteres

Observe que, embora eu esteja usando o rótulo maincomo alvo de salto, essa não é uma função recursiva.

.globl main
main:push $0;jmp main

Boa ideia: esse é um tipo de recursão sem recursão!
Andrea Corbellini

usando a86: dd 0fdeb6010 caracteres!
Skizz

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.