Kürzestes Programm, das StackOverflow Error auslöst [closed]

75

Schreiben Sie ein Programm, das einen StackOverflow-Fehler oder eine Entsprechung in der verwendeten Sprache ausgibt. In Java sollte das Programm beispielsweise werfen java.lang.StackOverflowError.

Sie dürfen keine Funktion definieren, die sich selbst oder eine neue Klasse aufruft (mit Ausnahme der mainin Java enthaltenen). Es sollten die Klassen der ausgewählten Programmiersprache verwendet werden.

Und es sollte den Fehler nicht explizit auslösen.

True Soft
quelle
4
Ich verstehe nicht "Verwenden Sie die Klassen der ausgewählten Programmiersprache"
Prince John Wesley
3
Ist es in Ordnung, eine Funktion zu definieren, die eine solche innere Funktion aufruft def s{def t=s;t}?
Prince John Wesley
12
Klassen sind in den meisten Sprachen nur eine bestimmte Art von Datenstruktur, nicht das Zentrum des Universums. Viele wissen nicht einmal haben so eine Sache.
hörte am
1
Das Lustige dabei ist, dass Sprachen, die die Beseitigung von Endpunktrekursionen erfordern (und Implementierungen, die dies unterstützen, wenn die Sprachen dies nicht erfordern) - die in einem sehr realen Sinne besser sind - im Nachteil sind. Die Antwort von TwiNight verweist auf die Version von Stack Overflow aus den Anfängen.
dmckee
1
Aus dem Java-Dokument: Wird ausgelöst, wenn ein Stapelüberlauf auftritt, weil eine Anwendung zu tief rekursiv ist. docs.oracle.com/javase/6/docs/api/java/lang/…
jsedano

Antworten:

90

Befunge, 1

Befunge kenne ich nicht, aber ...

1

vom Stapelüberlauf Code Golf

TwiNight
quelle
21
Erläuterung: 1 ist ein numerisches Literal, das beim Auftreten auf den Stapel verschoben wird. In Befunge wickelt sich der Steuerungsfluss so lange ab, bis er auf ein trifft @, um das Programm zu beenden.
Histokrat
6
Ich wusste nicht, dass es diese Frage bei StackOverflow gibt. Ich habe vor dem Posten nur auf dieser Seite gesucht.
True Soft
31
Ich bin leicht geschmeichelt, meine Antwort hier zu sehen.
Patrick
4
Dies funktioniert auch in> <>.
Cruncher
49

Python (2.7.3), 35 Zeichen

import sys
sys.setrecursionlimit(1)

Diese Operation selbst ist erfolgreich, aber sowohl das Skript als auch das interaktive Programm werden RuntimeError: 'maximum recursion depth exceeded'anschließend sofort ausgeführt .

Inspiriert von Elssars Antwort.

Kevin Reid
quelle
Ich habe darüber nachgedacht, dies als meine Lösung aufzustellen, war mir aber nicht sicher, ob der Fehler als Stapelüberlauf angesehen werden kann. Aber genau das ist es doch, oder?
Elssar
2
@elssar: Ich schätze, es gibt zwei Möglichkeiten, den Stapel zu überlaufen: Vergrößern Sie den verwendeten Teil des Stapels oder verkleinern Sie den nicht verwendeten Teil des Stapels. Wenn Sie sich einen mit Wasser gefüllten Eimer vorstellen, können Sie ihn überlaufen lassen, indem Sie mehr Wasser hinzufügen. Sie können ihn aber auch überlaufen lassen, indem Sie den Eimer schrumpfen.
19

Coq

Compute 70000.

70000ist nur syntaktischer Zucker für S (S ( ... (S O) ...))70000 S. Ich denke, es ist die Typprüfung, die den Stapelüberlauf verursacht.

Hier ist eine Warnung, die gedruckt wird, bevor der Befehl ausgeführt wird:

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).
ReyCharles
quelle
2
Das könnte Sie denken lassen, dass Coq eine unglaublich dumme Sprache ist ... lustig ...
aufgehört, sich am
1
@leftaroundabout Eigentlich nicht. Der Nat-Typ ist eine Peano-Zahl auf Typebene, die sich so verhalten muss , als wäre sie eine verknüpfte Liste.
FUZxxl
1
@FUZxxl: mein Kommentar war überhaupt nicht ironisch gemeint. Entscheiden Sie selbst, ob Sie die klassische Logik in diesen Satz aufnehmen oder konstruktiv bleiben möchten ...
auf, sich gegen den Uhrzeigersinn zu drehen
2
@leftaroundabout Ups ... Entschuldigung. Ich habe vergessen, dass der Markdown-Parser immer diese netten & lt; Ironie & gt; -Tags isst.
FUZxxl
19

Java - 35

class S{static{new S();}{new S();}}
aditsu
quelle
Hat OP nicht gesagt, keine neuen Klassen? Ich sehe dort keine public static void main. Oder verstehe ich Java einfach nicht?
Braden Best
4
@ B1KMusic Es gibt keine neuen Klassen, es gibt nur eine Klasse (S). Der Code verwendet einen statischen Initialisierer. Er löst den SO aus, bevor der JVM feststellt, dass es keine Hauptmethode gibt. Funktioniert mit Java 6.
Aditsu
1
Ich verstehe den statischen Block. Aber was ist der nächste Block?
Nicolas Barbulesco
1
@NicolasBarbulesco Das ist ein Initialisierungsblock, der ausgeführt wird, wenn Sie eine neue Instanz erstellen.
Aditsu
1
@ LuigiCortese Ich denke, es funktioniert nur mit Java 6 oder älter
aditsu
19

Javascript 24 Zeichen

Browserabhängige Antwort (muss Zugriff auf haben apply):

eval.apply(0,Array(999999))
  • eval war der kürzeste globale Funktionsname, den ich finden konnte (kennt jemand einen, der kürzer ist?)
  • applyErmöglicht die Konvertierung eines Arrays in Funktionsparameter, wobei der erste Parameter der Kontext der function ( this) ist.
  • Array(999999)erstellt ein Array mit der angegebenen Länge. Nicht sicher, wie viele Argumente maximal vorhanden sind, aber weniger als und mehr als99999

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

Hinweis - Aufgrund des Singlethread-Charakters von Javascript blockieren Endlosschleifen die Benutzeroberfläche und lösen niemals eine Ausnahme aus.

while(1);
for(;;);

Beides ist nicht qualifiziert.

Update - das spart drei Zeichen:

eval.apply(0,Array(1e7))
Shmiddty
quelle
MDN sagt, dass evaldas das kürzeste ist.
Peter Taylor
5
eval.apply(0,Array(1e6))gehen spart 3 Zeichen, können Sie sogar mit 9e9ohne Kosten
ThinkChaos
1
applyist eine Standard-ECMAScript-Funktion. Es gibt nichts Browserabhängiges. Es sei denn, Sie sprechen über wirklich alte Browser, aber dies würde in hypothetischem Netscape 2 applysowieso nicht funktionieren , da ArrayKlasse in Netscape 2 nicht existiert.
Konrad Borowski
1
neuer kürzester in ES6:eval(...Array(9e9))
Patrick Roberts
1
Wahrscheinlich nicht Standard, wirft in Chrome von der Konsole. dir.apply(0,Array(1e7));
Paul J
17

Python 2.7 (12 Zeichen)

exec('{'*99)

führt zu einem «s_push: Parser Stack Overflow»

Daniel
quelle
4
Ich bekommeSyntaxError: unexpected EOF while parsing
Martin Thoma
1
Mit exec('{'*101)bekomme ichMemoryError
Martin Thoma
4
In Python2 execist eine Anweisung, so dass Sie nur verwenden können exec'{'*999(99 scheint nicht genug zu sein)
Gnibbler
Sie benötigen mindestens 100, um einen MemoryError auszulösen. Und das ≠ Stapelüberlauf
noɥʇʎԀʎzɥʇʎԀʎ
13

Mathematica, 4 Zeichen

x=2x

$ RecursionLimit :: reclim: Rekursionstiefe von 1024 überschritten. >>

Alephalpha
quelle
1
"Möglicherweise definieren Sie keine Funktion, die sich selbst aufruft"
Tomas
13
Das ist keine Funktion, es ist eine Variable (es sei denn, es ist überhaupt nicht so, wie es aussieht).
AMK
Du hast meine Idee genommen.
PyRulez
12

Clojure, 12 Zeichen

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

Laufen in der Antwort:

user=> (#(%%)#(%%))
StackOverflowError   user/eval404/fn--407 (NO_SOURCE_FILE:1)
David Cabana
quelle
Dies erinnert mich an den Lambda-Kalkül-Ausdruck (\x.xx)(\x.xx), aber ich kenne die Clojure nicht gut genug, um sicher zu sagen, ob dies der Fall ist. Ich verstehe auch nicht, warum der oben erwähnte Ausdruck zu einem Stapelüberlauf führen würde, also machen Sie vielleicht ein paar Tricks mit dem Y-Kombinator? Diese Antwort interessiert mich und eine Erklärung wäre nett.
Zwei
12

Java - 113 Zeichen

Ich denke, dies bleibt im Sinne der Regel "keine selbstaufrufenden Methoden". Es wird nicht explizit ausgeführt und es wird sogar ein Java-Sprachkonstrukt durchlaufen.

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

Kondensierte Version:

public class S{public String toString(){return ""+this;}public static void main(String[] a){new S().toString();}}
Joe K
quelle
9
Naja, ""+thisist eigentlich ""+this.toString()so, dass die Methode sich selbst aufruft.
True Soft
1
@TrueSoft Ziemlich sicher, dass Java dort ein StringBuilderObjekt wirft . toStringwird wahrscheinlich von dort aus angerufen.
Cruncher
1
Mit der Zeit werden die Compiler und Optimierer durchgeführt, die toString()endet Methode up Wesenpublic java.lang.String toString() { return this.toString(); }
Jonathan Callen
12

C, 19 Bytes

main(){int i[~0u];}
Jens
quelle
4
@Thomas Ja, es ist ein Stapelüberlauf auf jedem Computer, auf dem lokale Variablen auf dem Stapel zugeordnet sind. Da die C-Sprache kein Konzept für eine Stapelüberlaufanzeige hat (es ist alles undefiniertes Verhalten; einer von ihnen manifestiert sich als Segfault), entspricht dies der ursprünglichen Anforderung.
Jens
OK, Entschuldigung, akzeptiert.
Tomas
3
es gibt main.c:1:16: error: size of array 'i' is negativefür mich auf gcc 4.8.1. Die unsignierte Version main(){int i[~0U];}funktioniert.
Csq
Funktioniert bei mir nicht, nachdem ich einen 4-GB-Stack manuell konfiguriert habe.
FUZxxl
@FUZxxl Interessant; sind deine ints 32 bit? Wenn ja, sizeof(i)ist 16GB. Macht die Verwendung eines uloder ullSuffix einen Unterschied? Einige Systeme überlasten den Speicher und stürzen nur ab, wenn in den Speicher geschrieben wird.
Jens
10

GolfScript (8 Zeichen)

{]}333*`

Ergebnis:

$ 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

Grundsätzlich wird eine stark verschachtelte Datenstruktur erstellt, und der Stapel wird beim Versuch, ihn in einen String umzuwandeln, überlaufen.

Peter Taylor
quelle
Für mich wirft dies keinen Fehler, sondern gibt[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[""]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]]]]]]]]]]] (and so on, output too long for comments)
ProgramFOX
@ProgramFOX, es wird einen Wert geben, den Sie ersetzen können, 333und er wird kaputt gehen. 333war der kleinste Wert, der für mich kaputt gegangen ist, aber wenn Sie eine andere Version von Ruby haben (oder, soweit ich weiß, dieselbe Version auf einem anderen Betriebssystem), kann es vor einem Überlauf zu einer anderen Anzahl von Stack-Frames kommen.
Peter Taylor
1
Pausen bei 3192 auf meinem Computer, 6.?funktioniert also immer noch ohne Hinzufügen von Zeichen.
Dennis
10

x86-Assembly, NASM-Syntax, 7 Byte

db"Pëý"

"Pëý" ist 50 EB FD in hexadezimal und

_loop:
push eax
jmp _loop

in x86-Assembly.


quelle
8

Rubin, 12

eval"[]"*9e3

Gibt

SystemStackError: stack level too deep

Vermutlich systemabhängig, aber Sie können Größenordnungen hinzufügen, indem Sie die letzte Ziffer nach oben drücken (nicht empfohlen).

Zur Erklärung editieren: Ähnlich wie in einigen anderen Beispielen wird eine Zeichenfolge von [][][]... 9000-mal wiederholt und dann ausgewertet: Die am weitesten rechts stehende Zeichenfolge []wird als Funktionsaufruf für den Rest analysiert und so weiter. Wenn es tatsächlich an den Anfang käme, würde es einen ArgumentError auslösen, da []es sich um ein Objekt mit einer []Methode handelt, die ein Argument erfordert. Mein Computer gibt jedoch einen Fehler aus, kurz bevor der Stapel mehr als neuntausend beträgt.

Histokrat
quelle
hmm ... stürzte ab IRB: P
Türklinke
Welche Version? ruby1.9.2 wirft "ArgumentError: falsche Anzahl von Argumenten (0 für 1..2)".
Manatwork
Fand einen alten ruby1.8.7. Dort funktioniert der eingestellte Code wie beschrieben.
Manatwork
Seltsam, es funktioniert auf meinem 1.8.7, 1.9.2 und 1.9.3.
Histokrat
Ich hätte gesagtdef f;f;end;f
EMBLEM
8

Rebol (11 Zeichen)

do s:[do s]

Erträge:

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

Obwohl Rebol Funktionen, Verschlüsse und Objekte hat, definiert dies keines davon. Es definiert eine Datenstruktur, die im Code-as-Data-Paradigma mit DO als Code behandelt werden kann.

Mit der REPL können wir die Frage nach dem "Was ist S" untersuchen :

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

>> type? s
== block!

>> length? s
== 2

>> type? first s
== word!

>> type? second s
== word!

DO verwandelt dies niemals in eine Funktion, sondern ruft den Evaluator in der aktuellen Umgebung der Struktur auf.

rgchris
quelle
1
+1 ... Ich hatte nicht bemerkt, dass meine Antwort eine Funktion definiert und gegen die Regeln verstößt, aber meine Antwort wurde bearbeitet, um DO zu verwenden ... dann habe ich bemerkt, dass Sie diese Antwort bereits übermittelt haben. Also habe ich meine gerade gelöscht, aber da ich geschrieben habe, warum dies kein Objekt / keine Funktion / keine Schließung definiert, dachte ich, ich würde die Erklärung in deine einfügen. Ich denke auch, dass das do do do irgendwie lustig und es wert ist, eingeschlossen zu werden. :-) Hoffe das ist ok!
Dr. Rebmu
7

C, 35 Zeichen

main(){for(;;)*(int*)alloca(1)=0;}
Job
quelle
Warum etwas auf dem zugewiesenen Platz aufbewahren?
Peter Taylor
1
In diesem Fall ist es unmöglich, das Problem in C zu lösen.
FUZxxl
3
@dmckee, Nicht alle Segmentierungsfehler sind Stapelüberläufe, aber ich würde sagen, dass dies der Fall ist, da dies auf die Überschreitung der Stapelkapazität zurückzuführen ist.
Ugoren
1
@dmckee, reserviert vom Stapel.
Ugoren
1
@PeterTaylor: Das hängt wahrscheinlich von der Implementierung ab, wird aber in meinem Fall alloca(1)grundsätzlich in übersetzt, sub $1, %espsodass der Stack nicht berührt wird.
Job
7

Common Lisp, 7 Zeichen

#1='#1#
Erik Haliewicz
quelle
Schön ... Ich hatte vor, #1=(#1#)für das Terminal und zu verwenden (print #1=(#1#)), aber Ihre Lösung ist so viel besser.
Protist
Tatsächlich läuft das beim Lesen nicht über, nur wenn Sie versuchen, es zu drucken. Abgesehen von dem Unterschied von 1 Charakter ist deins nicht besser.
Protist
Du hast Recht, das habe ich gerade herausgeschnitten. Ich bin nicht sicher, ob es eine Möglichkeit gibt, beim Lesen einen Überlauf zu verursachen.
Erik Haliewicz
Tatsächlich verursacht #. # 1 = '# 1 # einen Überlauf der
Lesezeit
7

Python - 11 Zeichen

exec'('*999

>>> exec'('*999
s_push: parser stack overflow
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
MemoryError
Knabberzeug
quelle
Sehr clevere Lösung.
mbomb007
7

Casio-Rechner, 11 Tastendrücke

Es ist ziemlich schwierig, Bytes / Token in dieser "Sprache" zu zählen. Ich habe die Anzahl der erforderlichen Tastendrücke angegeben, mit Ausnahme von Umschalt, Alpha (die zweite Umschalttaste) und =am Ende - dies passt mit Sicherheit in 1 Byte pro Tastendruck.

Getestet mit dem Modell fx-85GT PLUS , einem nicht grafisch dargestellten, "nicht programmierbaren" wissenschaftlichen Standardrechner. Andere Modelle werden funktionieren.

Einfach 11 Würfelwurzeln stapeln:

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

Es gibt nicht einmal einen Syntaxfehler über die fehlende Zahl unter der Quadratwurzel.

Dies scheint nicht mit Quadratwurzeln zu funktionieren.

Alternativ können Sie den Vorgang auch cos(31 Mal wiederholen .

Ausgabe

Stack ERROR

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

Ich glaube, dass dies als Stapelüberlauf qualifiziert ist. Der Stapel scheint winzig zu sein ...


quelle
Ich habe immer gedacht, es heißt Stack-Fehler, weil Sie zu viele Wurzeln "gestapelt" haben: P
FlipTack
Mein Canon-Rechner gibt bei nahezu jedem Operator (mit Ausnahme von mindestens +, -, * und /) einen Stapelfehler aus, wenn er mindestens 25 Mal wiederholt wird. Dies führt beispielsweise zu einem Stack-Fehler (ohne Syntaxfehler):(((((((((((((((((((((((((
Steadybox
7

FORTH, 13 Bytes

BEGIN 1 AGAIN

Überläuft den Wertestapel

Ratschenfreak
quelle
: X X ; X(9) muss den Rückgabestapel überlaufen
AMK
funktioniert nicht (X ist beim Definieren des Anrufs nicht definiert und das ist eine Selbstreferenz / Rekursion
Ratschenfreak
@ratchetfreak, diese Steuerwörter können nur in einem Kompilierungszustand verwendet werden, daher müssen sie in eine :... ;Wortdefinition eingeschlossen werden. Das fügt mindestens 6 Zeichen hinzu, plus mindestens 2 weitere, damit dies als Programm ausgeführt wird. Sie könnten in der Lage sein , es kürzer zu tun, aber hier ist ein Beispiel: : F BEGIN 1 AGAIN ; F. Ich schlage dies vor, weil die Frage lautet: "Schreiben Sie ein Programm." Wie auch immer, ich habe dir ein Upvote für Forth gegeben, unabhängig von der Anzahl der Charaktere! :-)
Darren Stone
6

Nachschrift, 7

{1}loop

Z.B.

$ 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>
Luser Droog
quelle
6

Haskell (GHC, keine Optimierung), 25

main=print$sum[1..999999]

Summe ist in der Summe faul. Dies stapelt eine Menge Thunks auf und versucht dann, sie alle am Ende auszuwerten, was zu einem Stapelüberlauf führt.

Joey Adams
quelle
ich dachte immer, dass summe mit foldl 'implementiert wurde. ist es nicht
stolzer Haskeller
Leider
Joey Adams
6

LaTeX: 8 Zeichen

\end\end

Dies ist derselbe Code, der in dieser Antwort verwendet wird . Im Wesentlichen der \enderweitert Makro selbst wiederholt, in einem Stapelüberlauf resultierenden: TeX capacity exceeded, sorry [input stack size=5000]. Eine ausführlichere Erklärung finden Sie hier .

bwDraco
quelle
5

PHP 5.4, 33 Zeichen

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

Dies führt zu einem Stapelüberlauf, wenn die verschachtelten stdClass- Objekte automatisch zerstört werden:

$ 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 ()
PleaseStand
quelle
2
+1 für den zweiten Auftritt von PHP auf CodeGolf!
Bojangles
5

Q / k (16 Zeichen)

Ich bin mir nicht sicher, ob dies im Sinne der Herausforderung ist, aber ich glaube nicht, dass es gegen die Regeln verstößt:

s:{f`};f:{s`};f`
Skeevey
quelle
Es ist eine Schande, dass C # so viel Tipparbeit erfordert, dass Sie meine Antwort inspiriert haben!
Andrew Gray
5

Ein Haufen im gleichen Stil:

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)
Eric
quelle
In Python x=lambda y:y(y);x(x)ist kürzer (20 Zeichen). Diese Funktion ist nicht rekursiv. x ruft jede als Argument übergebene Funktion auf.
AMK
Ruby 2.0 -->x{x[x]}[->y{y[y]}]
John Dvorak
Mathematica#@#&[#@#&]
Alephalpha
Sie verwenden nur die Rekursion. Warum tun Sie das dann nicht, zum Beispiel in JS: (function x () {x ()}) ()?
Xem
@xem-Anforderungen sagen keine Rekursion aus, deshalb.
Danny
5

C #: 106 86 58 46 32 28

32 : Getter können SO Ihre Maschine einfach in C #:

public int a{get{return a;}}
Andrew Gray
quelle
1
Keine Notwendigkeit für Setterpublic int a {get{return a;}}
Mike Koder
3
Dies verstößt gegen die Regel "Sie dürfen keine Funktion definieren, die sich selbst aufruft". Zugegeben, es verbirgt sich hinter Syntaxzucker, aber es fehlt immer noch der Sinn der Herausforderung.
Peter Taylor
Das Hinzufügen des Setters umgeht die Regel etwas, da Sie nun zwei Funktionen haben, die sich gegenseitig aufrufen. Aber ich frage mich: Verstößt das immer noch gegen die Absichten des OP hinter dieser Herausforderung?
Andrew Gray
1
Die Idee, wie ich sie verstehe, besteht darin, eine übermäßig verschachtelte Rekursion im Interpreter oder der Standard-API der Sprache zu finden. Dies ist in C # möglicherweise nicht so einfach.
Peter Taylor
1
Warum "public string"? "int" funktioniert genauso gut:int a { get { return a; } }
NPSF3000
5

INTERCAL, 12 Bytes

(1)DO(1)NEXT

Erläuterung:

NEXTist die INTERCAL-Version eines Unterprogrammaufrufs (oder zumindest der nächstmögliche). Es schiebt die aktuelle Position auf den NEXTStapel und springt zum angegebenen Etikett.

Wenn die NEXTStack-Länge jedoch 80 überschreitet, erhalten Sie so ziemlich die INTERCAL-Version eines Stack-Überlaufs:

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

Probieren Sie es auf Ideone. .

kirbyfan64sos
quelle
6
"Ist in der schwarzen Lagune verschwunden" Was ist das, 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
Pfeffer
quelle
4

X86-Assembly (AT & T), 33 Zeichen

Beachten Sie, dass das Label zwar mainals Sprungziel verwendet wird, dies jedoch keine rekursive Funktion ist.

.globl main
main:push $0;jmp main
Job
quelle
Schöne Idee: Das ist eine Art Rekursion-ohne-Rekursion!
Andrea Corbellini
mit a86: dd 0fdeb6010 zeichen !
Skizz
4

Python (17):

c='exec c';exec c
ɐɔıɐɔuʇǝɥʇs
quelle
hm, ich bekommeKeyError: 'unknown symbol table entry'
stefreak