Programma più breve che genera l'errore StackOverflow [chiuso]


75

Scrivi un programma che genera un errore StackOverflow o l'equivalente nella lingua utilizzata. Ad esempio, in Java , il programma dovrebbe essere lanciato java.lang.StackOverflowError.

Non ti è consentito definire una funzione che chiama se stessa o una nuova classe (tranne quella contenente mainin java). Dovrebbe usare le classi del linguaggio di programmazione selezionato.

E non dovrebbe generare esplicitamente l'errore.


4
Non capisco "usa le classi del linguaggio di programmazione selezionato"
Prince John Wesley,

3
Va bene definire una funzione che chiama funzione interna come questa def s{def t=s;t}?
Prince John Wesley,

12
Nella maggior parte delle lingue, le classi sono solo un tipo speciale di struttura di dati, non il centro dell'universo. Molti non hanno nemmeno una cosa del genere.
cessò di girare in senso antiorario il

1
La cosa divertente qui è che le lingue che richiedono l'eliminazione della ricorsione della coda (e le implementazioni che la supportano quando le lingue non lo richiedono) --- che sono in un senso molto migliore meglio --- ne sono svantaggiate. La risposta di TwiNight si collega alla versione di questo che esiste su Stack Overflow sin dai primi giorni.
dmckee,

1
Dal documento java: generato quando si verifica un overflow dello stack perché un'applicazione esegue un ricorso troppo profondo. docs.oracle.com/javase/6/docs/api/java/lang/…
jsedano

Risposte:


90

Befunge, 1

Non conosco Befunge, ma ...

1

da Stack overflow codice golf


21
Spiegazione: 1 è un valore letterale numerico che viene inserito nello stack quando viene rilevato. In Befunge, il flusso di controllo si avvolge fino a quando non incontra @e termina il programma.
istocratico

6
Non sapevo che ci fosse questa domanda su StackOverflow. Ho cercato solo su questo sito prima di pubblicare.
True Soft

31
Sono leggermente lusingato di vedere la mia risposta qui.
Patrick,

4
Funziona anche in> <>.
Cruncher,

49

Python (2.7.3), 35 caratteri

import sys
sys.setrecursionlimit(1)

Questa operazione ha esito positivo, ma sia lo script che l'interattivo verranno immediatamente lanciati in RuntimeError: 'maximum recursion depth exceeded'seguito.

Ispirato dalla risposta di elssar.


Ho pensato invece di pensarlo come soluzione, ma non ero sicuro che l'errore potesse essere considerato un overflow dello stack. Anche se, in sostanza, è quello che è, giusto?
elssar,

2
@elssar: Immagino che ci siano due modi per traboccare lo stack: ingrandire la parte usata dello stack o ridurre la parte inutilizzata dello stack. Se immagini un secchio che si riempie di acqua, puoi traboccare aggiungendo più acqua, ma puoi anche traboccare restringendo il secchio.

19

coq

Compute 70000.

70000è solo zucchero sintattico per S (S ( ... (S O) ...))con i 70000 S. Penso che sia il controllo del tipo a causare l'overflow dello stack.

Ecco un avviso che viene stampato prima dell'esecuzione del 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
Ciò potrebbe farti pensare che Coq sia un linguaggio incredibilmente stupido ... divertente ...
smesso di girare in senso antiorario il

1
@leftaroundabout In realtà no. Il tipo Nat è un numero peano a livello di tipo che deve agire come se fosse un elenco collegato.
FUZxxl,

1
@FUZxxl: il mio commento non era affatto ironico. Decidi tu stesso se vuoi includere la logica classica in quella frase o preferisci rimanere costruttivo ...
cessò di girare in senso antiorario il

2
@leftaroundabout Oops ... scusa. Ho dimenticato che il parser markdown mangia sempre quelle belle tag "ironia".
FUZxxl,

19

Java - 35

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

OP non ha detto nessuna nuova lezione? Non ci vedo public static void maindentro. O non riesco a capire Java?
Braden Best

4
@ B1KMusic Non ci sono nuove classi, c'è solo una classe (S). Il codice usa un inizializzatore statico, lancia il SO prima che jvm capisca che non esiste un metodo principale. Funziona con Java 6.
Aditsu,

1
Capisco il blocco statico. Ma qual è il prossimo blocco?
Nicolas Barbulesco,

1
@NicolasBarbulesco Questo è un blocco di inizializzatore, viene eseguito quando si costruisce una nuova istanza.
aditsu,

1
@LuigiCortese Penso che funzioni solo con java 6 o precedente
aditsu,

19

Javascript 24 caratteri

Risposta dipendente dal browser (deve avere accesso a apply):

eval.apply(0,Array(999999))
  • eval era il nome della funzione globale più breve che potessi trovare (qualcuno ne conosce uno più corto?)
  • applyci permette di convertire un array in parametri di funzione, il primo parametro è il contesto della funzione ( this)
  • Array(999999)creerà un array con la lunghezza elencata. Non sono sicuro di quale sia il numero massimo di argomenti, ma è inferiore a questo e maggiore di99999

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 : a causa della natura a thread singolo di JavaScript, i loop infiniti finiscono per bloccare l'interfaccia utente e non generare mai un'eccezione.

while(1);
for(;;);

Nessuno di questi si qualifica.

Aggiornamento : questo si rade di tre caratteri:

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

MDN dice che evalè il più breve.
Peter Taylor,

5
eval.apply(0,Array(1e6))salva 3 caratteri, si può anche andare con 9e9a costo zero
ThinkChaos

1
applyè una funzione ECMAScript standard. Non c'è nulla che dipende dal browser. A meno che tu non stia parlando di browser davvero vecchi, ma questo non funzionerebbe nell'ipotetico Netscape 2 con applycomunque, perché la Arrayclasse non esiste in Netscape 2.
Konrad Borowski

1
nuovo più corto in ES6:eval(...Array(9e9))
Patrick Roberts il

1
Probabilmente non standard, getta in Chrome dalla console. dir.apply(0,Array(1e7));
Paul J,

17

Python 2.7 (12 caratteri)

exec('{'*99)

risulta in «s_push: overflow dello stack del parser»


4
RicevoSyntaxError: unexpected EOF while parsing
Martin Thoma il

1
Con exec('{'*101)ottengoMemoryError
Martin Thoma il

4
In Python2, execè un'affermazione, quindi puoi semplicemente usare exec'{'*999(99 non sembra essere abbastanza)
gnibbler

Hai bisogno di almeno 100 per attivare un MemoryError. E quel ≠ overflow dello stack
noɥʇʎԀʎzɐɹƆ

13

Mathematica, 4 caratteri

x=2x

$ RecursionLimit :: reclim: superata la profondità di ricorsione di 1024. >>


1
"Non puoi definire la funzione che si chiama da sola"
Tomas,

13
Questa non è una funzione, è una variabile (a meno che non sia affatto come appare).
AMK,

Hai preso la mia idea.
PyRulez,

12

Clojure, 12 caratteri

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

Esecuzione in sostituzione:

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

Questo mi ricorda l'espressione del calcolo lambda (\x.xx)(\x.xx), ma non conosco il clojure abbastanza bene da dire con certezza se questo è ciò che sta accadendo. Inoltre non vedo perché l'espressione di cui sopra provocherebbe un overflow dello stack, quindi forse stai facendo qualche trucco con il combinatore Y? Questa risposta mi interessa e una spiegazione sarebbe gradita.
Zwei,

12

Java - 113 caratteri

Penso che questo rimanga nello spirito della regola "nessun metodo di auto-chiamata". Non lo fa esplicitamente e passa anche attraverso un costrutto in linguaggio Java.

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

Versione condensata:

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

9
Bene, in ""+thisrealtà ""+this.toString(), quindi il metodo si chiama.
True Soft

1
@TrueSoft Abbastanza sicuro java lancia un StringBuilderoggetto lì. toStringsarà probabilmente chiamato da lì.
Cruncher,

1
Al termine del compilatore e dell'ottimizzatore, il toString()metodo finisce per esserepublic java.lang.String toString() { return this.toString(); }
Jonathan Callen,

12

C, 19 byte

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

4
@Thomas Sì, si tratta di un overflow dello stack su qualsiasi macchina in cui le variabili locali sono allocate nello stack. Poiché il linguaggio C non ha il concetto di un'indicazione di overflow dello stack (è tutto un comportamento indefinito; uno di essi si manifesta come un segfault), questo si adatta al requisito originale.
Jens,

OK, scusa, accettato.
Tomas,

3
mi dà main.c:1:16: error: size of array 'i' is negativesu gcc 4.8.1. La versione non firmata main(){int i[~0U];}funziona.
Cq

Non funziona per me dopo aver configurato manualmente uno stack da 4 GB.
FUZxxl,

@FUZxxl Interessante; sono i tuoi ints a 32 bit? In tal caso, sizeof(i)è di 16 GB. Fa utilizzando una ulo ullsuffisso di fare la differenza? Alcuni sistemi sovraccaricano la memoria e si arrestano in modo anomalo solo se la memoria viene scritta.
Jens,

10

GolfScript (8 caratteri)

{]}333*`

Risultato:

$ 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

Fondamentalmente questo crea una struttura di dati fortemente nidificata e quindi trabocca lo stack quando si tenta di trasformarlo in una stringa.


Per me, questo non genera un errore, ma genera[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[""]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]]]]]]]]]]] (and so on, output too long for comments)
ProgramFOX

@ProgramFOX, ci sarà un valore che puoi sostituire 333e si romperà. 333era il valore più piccolo che si è rotto per me, ma se hai una versione diversa di Ruby (o forse la stessa versione su un sistema operativo diverso, per quanto ne so) potrebbe gestire un numero diverso di frame di stack prima di traboccare.
Peter Taylor,

1
Si rompe a 3192 sulla mia macchina, quindi 6.?funziona ancora senza aggiungere caratteri.
Dennis,

10

assembly x86, sintassi NASM, 7 byte

db"Pëý"

"Pëý" è 50 EB FD in esadecimale e

_loop:
push eax
jmp _loop

nell'assemblaggio x86.


8

Ruby, 12

eval"[]"*9e3

SystemStackError: stack level too deep

Presumibilmente dipendente dal sistema, ma è possibile aggiungere ordini di grandezza aumentando l'ultima cifra (non consigliata).

Modifica per spiegazione: analogamente ad altri esempi, questo crea una stringa di [][][]... ripetuta 9000 volte, quindi la valuta: l'estrema destra []viene analizzata come una chiamata di funzione al resto e così via. Se effettivamente fosse arrivato all'inizio, avrebbe generato un ArgumentError perché []è un oggetto con un []metodo che richiede un argomento, ma la mia macchina genera un errore un po 'prima che lo stack superi le novemila.


hmm ... si è schiantato IRB: P
Maniglia della porta

Quale versione? ruby1.9.2 genera "ArgumentError: errato numero di argomenti (0 per 1..2)".
arte

Trovato un vecchio ruby1.8.7. Lì il codice pubblicato funziona come descritto.
arte

Strano, funziona sul mio 1.8.7, 1.9.2 e 1.9.3.
histocrat

Avrei dettodef f;f;end;f
EMBLEMA,

8

Rebol (11 caratteri)

do s:[do s]

I rendimenti:

>> 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...

Sebbene Rebol abbia funzioni, chiusure e oggetti ... questo non definisce nessuno di questi. Definisce una struttura di dati, che nel paradigma codice-come-dati può essere trattata come codice usando DO.

Possiamo sondare la questione di "cos'è S" con REPL:

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

>> type? s
== block!

>> length? s
== 2

>> type? first s
== word!

>> type? second s
== word!

DO non lo trasforma mai in una funzione, invoca il valutatore nell'attuale ambiente sulla struttura.


1
+1 ... Non avevo notato che la mia risposta stava definendo una funzione e che era contro le regole, ma ho modificato la mia risposta per usare DO ... poi ho notato che avevi già inviato quella risposta. Quindi ho appena cancellato il mio, ma dato che avevo scritto perché questo non sta definendo un oggetto / funzione / chiusura, ho pensato di inserire la spiegazione nel tuo. Inoltre penso che il do do do do sia divertente e vale la pena includerlo. :-) Spero sia ok!
Dr. Rebmu,

7

C, 35 caratteri

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

Perché conservare qualcosa nello spazio assegnato?
Peter Taylor,

1
In questo caso, è impossibile risolvere questo problema in C.
FUZxxl

3
@dmckee, Non tutti gli errori di segmentazione sono overflow dello stack, ma direi che lo è, poiché è il risultato del superamento della capacità dello stack.
ugoren,

1
@dmckee, alloca alloca dallo stack.
ugoren,

1
@PeterTaylor: Probabilmente dipende dall'implementazione, ma nel mio caso alloca(1)è sostanzialmente tradotto in sub $1, %espmodo che lo stack non venga toccato.
Giobbe

7

Lisp comune, 7 personaggi

#1='#1#

Bello ... stavo pianificando di utilizzare #1=(#1#)per il terminale e (print #1=(#1#)), ma la tua soluzione è molto meglio.
protista il

In realtà ciò non trabocca al momento della lettura, solo quando si tenta di stamparlo. Quindi, a parte la differenza di 1 carattere, il tuo non è migliore.
protista il

Hai ragione, l'ho appena modificato. Non sono sicuro se c'è un modo per causare un overflow al momento della lettura.
Erik Haliewicz,

In realtà, #. # 1 = '# 1 # provoca un overflow del tempo di lettura :-)
Erik Haliewicz,

7

Python - 11 caratteri

exec'('*999

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

Soluzione molto intelligente.
mbomb007,

7

Casio Calculator, 11 tasti premuti

È abbastanza difficile contare byte / token in questa "lingua" - ho dato il numero di tasti premuti, esclusi Shift, Alpha (il secondo tasto shift) e =alla fine - questo si adatta sicuramente a 1 byte per tasto.

Testato sul modello fx-85GT PLUS , che è una calcolatrice scientifica standard, non grafica, "non programmabile". Altri modelli funzioneranno.

Basta impilare 11 radici cubiche:

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

Non fornisce nemmeno un errore di sintassi sul numero mancante sotto la radice quadrata.

Questo non sembra funzionare con radici quadrate.

In alternativa, ripetere cos(31 volte.

Produzione

Stack ERROR

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

Credo che questo si qualifichi come overflow dello stack. Lo stack sembra essere minuscolo ...


Ho sempre pensato che fosse chiamato errore di stack perché hai "impilato" troppe radici: P
FlipTack

La mia calcolatrice Canon genera un errore di stack con qualsiasi operatore (esclusi almeno +, -, * e /) se viene ripetuta 25 volte o più. Ad esempio, ciò causa un errore di stack (senza errore di sintassi):(((((((((((((((((((((((((
Steadybox

7

FORTH, 13 byte

BEGIN 1 AGAIN

trabocca lo stack di valori


: X X ; X(9) deve overflow stack di ritorno
AMK

non funzionerà (X non viene definito durante la definizione della chiamata e questo è un riferimento automatico / ricorsione
maniaco del cricchetto

@ratchetfreak, quelle parole di controllo possono essere utilizzate solo in uno stato di compilazione, quindi devono essere racchiuse in una :... ;definizione di parola. Ciò aggiunge almeno 6 caratteri, più almeno altri 2 affinché questo venga eseguito come programma. Potreste essere in grado di farlo più breve, ma ecco un esempio: : F BEGIN 1 AGAIN ; F. Lo consiglio perché la domanda chiede: "Scrivi un programma". Comunque, ti ho dato un voto positivo per Forth, indipendentemente dal conteggio dei caratteri! :-)
Darren Stone

6

Postscript, 7

{1}loop

Per esempio.

$ 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 caratteri

\end\end

Questo è lo stesso codice usato in questa risposta . Essenzialmente, la \endmacro si espande più volte, causando un overflow di stack: TeX capacity exceeded, sorry [input stack size=5000]. Una spiegazione più dettagliata può essere trovata qui .


5

PHP 5.4, 33 caratteri

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

Ciò provoca un overflow dello stack quando gli oggetti stdClass nidificati vengono automaticamente distrutti:

$ 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 per quella che deve essere la seconda apparizione di PHP su CodeGolf!
Bojangles,

5

Q / k (16 caratteri)

Non sono sicuro che questo sia nello spirito della sfida, ma non credo che infrange le regole:

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

È un peccato che C # richieda così tanto digitando, hai ispirato la mia risposta!
Andrew Grey,

5

Un gruppo nello stesso stile:

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)

In Python x=lambda y:y(y);x(x)è più breve (20 caratteri). Questa funzione non è ricorsiva. x chiama qualsiasi funzione passata ad essa come argomento.
AMK,

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

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

Stai solo usando la ricorsione, quindi perché non farlo, ad esempio in JS: (funzione x () {x ()}) ()?
xem

I requisiti di @xem non dicono ricorsione, ecco perché.
Danny,

5

N. C: 106 86 58 46 32 28

32 : Getters può COSÌ facilmente la tua macchina in C #:

public int a{get{return a;}}

1
Non c'è bisogno di setterpublic int a {get{return a;}}
Mike Koder

3
Ciò viola la regola "Non è consentito definire una funzione che si chiama da sola". Certo, è nascosto dietro lo zucchero sintattico, ma manca ancora il punto della sfida.
Peter Taylor,

L'aggiunta del setter in qualche modo elude la regola, perché ora hai due funzioni che si chiamano. Ma mi chiedo: ciò viola ancora le intenzioni del PO dietro questa sfida?
Andrew Gray,

1
L'idea come la capisco è quella di trovare una ricorsione eccessivamente nidificata nell'interprete o nell'API standard della lingua. Questo potrebbe non essere troppo facile in C #.
Peter Taylor,

1
Perché "stringa pubblica"? "int" funziona altrettanto bene:int a { get { return a; } }
NPSF3000

5

INTERCAL, 12 byte

(1)DO(1)NEXT

Spiegazione:

NEXTè la versione di INTERCAL di una chiamata di subroutine (o, almeno, la più vicina che puoi ottenere). Spinge la posizione corrente sulla NEXTpila e salta all'etichetta data.

Tuttavia, se la NEXTlunghezza dello stack supera 80, ottieni praticamente la versione INTERCAL di un overflow dello stack:

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

Provalo su Ideone. .


6
"È SCARSO NELLA LAGUNA NERA" che cos'è questo, 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

Assemblaggio X86 (AT&T), 33 caratteri

Si noti che sebbene io stia usando l'etichetta maincome obiettivo di salto, questa non è una funzione ricorsiva.

.globl main
main:push $0;jmp main

Bella idea: questa è una sorta di ricorsione senza ricorsione!
Andrea Corbellini,

usando a86: dd 0fdeb6010 caratteri!
Skizz,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.