Le programme le plus court qui génère une erreur StackOverflow [fermé]


75

Ecrivez un programme qui génère une erreur StackOverflow ou l’équivalent dans la langue utilisée. Par exemple, en Java , le programme devrait lancer java.lang.StackOverflowError.

Vous n'êtes pas autorisé à définir une fonction qui s'appelle elle-même ou une nouvelle classe (sauf celle contenant mainjava). Il devrait utiliser les classes du langage de programmation sélectionné.

Et il ne faut pas jeter l'erreur explicitement.


4
Je ne comprends pas "utiliser les classes du langage de programmation sélectionné"
Prince John Wesley

3
Est-il possible de définir une fonction qui appelle une fonction interne comme celle-ci def s{def t=s;t}?
Prince John Wesley

12
Dans la plupart des langues, les classes ne sont qu'un type spécial de structure de données, et non le centre de l'univers. Beaucoup ne sont même pas avoir une telle chose.
cessé de tourner dans le sens anti-horaire le

1
La chose amusante ici est que les langues qui exigent l’élimination de la récursion finale (et les implémentations qui la supportent quand elles ne l’exigent pas) - qui sont vraiment meilleures au sens réel - sont désavantagées à cet égard. La réponse de TwiNight renvoie à la version de this existante sur Stack Overflow des premiers jours.
dmckee

1
De la doc java: levé lorsqu'un débordement de pile se produit car une application est trop récursive. docs.oracle.com/javase/6/docs/api/java/lang/…
jsedano

Réponses:


90

Befunge, 1

Je ne sais pas Befunge, mais ...

1

de Stack Overflow Code Golf


21
Explication: 1 est un littéral numérique qui est poussé dans la pile lorsqu'il est rencontré. Dans Befunge, le flux de contrôle s’enroule jusqu’à la @fin du programme.
Histocrat

6
Je ne savais pas qu'il y avait cette question sur StackOverflow. J'ai cherché uniquement sur ce site avant de poster.
True Soft

31
Je suis légèrement flatté de voir ma réponse ici.
Patrick

4
Cela fonctionne dans> <> aussi.
Cruncher

49

Python (2.7.3), 35 caractères

import sys
sys.setrecursionlimit(1)

Cette opération elle-même réussit, mais le script et l’interactif jetteront immédiatement la RuntimeError: 'maximum recursion depth exceeded'suite.

Inspiré par la réponse d'elssar.


Je pensais plutôt mettre cela comme solution, mais je ne savais pas si l'erreur pouvait être considérée comme un dépassement de capacité. Bien que, essentiellement, c'est ce que c'est, non?
elssar

2
@elssar: Je suppose qu'il y a deux façons de déborder de la pile: agrandir la partie utilisée de la pile ou réduire la partie inutilisée de la pile. Si vous imaginez un seau se remplissant d’eau, vous pouvez le déborder en ajoutant de l’eau, mais vous pouvez également le faire en rétrécissant le seau.

19

Coq

Compute 70000.

70000est juste du sucre syntaxique pour S (S ( ... (S O) ...))avec 70000 S. Je pense que c'est le vérificateur de type qui cause le débordement de pile.

Voici un avertissement imprimé avant l'exécution de la commande:

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
Cela pourrait vous laisser penser que Coq est un langage incroyablement stupide ... drôle ...
cessé de tourner en contre-horaire le

1
@leftaroundabout En fait non. Le type Nat est un peano numeral de niveau type qui doit faire office de liste chaînée.
FUZxxl

1
@FUZxxl: mon commentaire n'était pas du tout ironique. Décidez vous-même si vous voulez inclure la logique classique dans cette phrase, ou si vous préférez rester constructif ...
Cessé de tourner à contre sens, le

2
@leftaroundabout Oups ... désolé. J'ai oublié que l'analyseur de démarques mange toujours ces balises <lt; ironie </ b>;
FUZxxl

19

Java - 35

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

OP n'a pas dit pas de nouvelles classes? Je ne vois pas public static void mainde là dedans. Ou est-ce que je ne parviens pas à comprendre Java?
Braden Best

4
@ B1KMusic Il n'y a pas de nouvelles classes, il n'y a qu'une classe (S). Le code utilise un initialiseur statique, il jette le SO avant que le JVM découvre qu'il n'y a pas de méthode principale. Fonctionne avec java 6.
Aditsu

1
Je comprends le bloc statique. Mais quel est le prochain bloc?
Nicolas Barbulesco

1
@ NicolasBarbulesco C'est un bloc d'initialisation, il est exécuté lorsque vous construisez une nouvelle instance.
Aditsu

1
@ LuigiCortese Je pense que cela ne fonctionne qu'avec java 6 ou plus ancien
aditsu

19

Javascript 24 caractères

Réponse dépendante du navigateur (doit avoir accès à apply):

eval.apply(0,Array(999999))
  • eval est-ce que le nom de fonction global le plus court que j'ai pu trouver (quelqu'un connaît-il un nom plus court?)
  • applynous permet de convertir un tableau en paramètres de fonction, le premier paramètre étant le contexte de la fonction ( this)
  • Array(999999)créera un tableau avec la longueur indiquée. Vous ne savez pas quel est le nombre maximum d'arguments, mais il est inférieur à cela et supérieur à99999

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

Remarque - En raison de la nature mono-threadée de javascript, des boucles infinies finissent par verrouiller l'interface utilisateur et ne jamais lancer d'exception.

while(1);
for(;;);

Ni l'un ni l'autre ne sont admissibles.

Mise à jour - cela rase trois personnages:

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

MDN dit que evalc'est le plus court.
Peter Taylor

5
eval.apply(0,Array(1e6))enregistre 3 caractères, vous pouvez même y aller 9e9sans frais
ThinkChaos

1
applyest une fonctionnalité standard d'ECMAScript. Il n'y a rien qui dépend du navigateur. Sauf si vous parlez de très vieux navigateurs, mais cela ne fonctionnerait pas dans l'hypothèse de Netscape 2 de applytoute façon, car la Arrayclasse n'existe pas dans Netscape 2.
Konrad Borowski

1
nouvelle plus courte en ES6:eval(...Array(9e9))
Patrick Roberts le

1
Probablement non standard, jette dans Chrome depuis la console. dir.apply(0,Array(1e7));
Paul J

17

Python 2.7 (12 caractères)

exec('{'*99)

résulte en un «s_push: débordement de pile de l'analyseur»


4
Je reçoisSyntaxError: unexpected EOF while parsing
Martin Thoma

1
Avec exec('{'*101)je reçoisMemoryError
Martin Thoma

4
En Python2, execc’est une déclaration que vous pouvez donc utiliser exec'{'*999(99 ne semble pas suffire)
gnibbler

Vous devez avoir au moins 100 pour déclencher une MemoryError. Et ce ≠ stack overflow
nozɐɹƆ

13

Mathematica, 4 caractères

x=2x

$ RecursionLimit :: reclim: La profondeur de récursivité de 1024 a été dépassée. >>


1
"Vous ne pouvez pas définir une fonction qui s'appelle elle-même"
Tomas

13
Ce n'est pas une fonction, c'est une variable (à moins que ça ne ressemble pas du tout à ça).
AMK

Tu as pris mon idée.
PyRulez

12

Clojure, 12 caractères

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

En cours d'exécution dans le repl:

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

Cela me rappelle l'expression du lambda calcul (\x.xx)(\x.xx), mais je ne connais pas assez la méthode du clojure pour savoir avec certitude si c'est ce qui se passe. Je ne vois pas non plus pourquoi l'expression ci-dessus entraînerait un débordement de pile, alors peut-être que vous faites une supercherie avec le combinateur en Y? Cette réponse m'intéresse et une explication serait bien.
Zwei

12

Java - 113 caractères

Je pense que cela reste dans l'esprit de la règle "pas de méthode d'auto-appel". Il ne le fait pas explicitement et passe même par une construction de langage Java.

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

Version condensée:

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

9
En ""+thisfait ""+this.toString(), la méthode s’appelle elle-même.
True Soft

1
@ TrueSoft Assez sûr que java jette un StringBuilderobjet là-bas. toStringsera probablement appelé de l'intérieur.
Cruncher

1
Au moment où le compilateur et l'optimiseur sont terminés, la toString()méthode finit par êtrepublic java.lang.String toString() { return this.toString(); }
Jonathan Callen

12

C, 19 octets

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

4
@Thomas Oui, il s'agit d' un débordement de pile sur toute machine où des variables locales sont allouées sur la pile. Comme le langage C n’a pas de concept d’indication de débordement de pile (il s’agit d’un comportement indéfini; l’un d’eux se manifeste par une erreur de segmentation), cela correspond à l’exigence initiale.
Jens

OK, désolé, accepté.
Tomas

3
cela donne main.c:1:16: error: size of array 'i' is negativepour moi sur gcc 4.8.1. La version non signée main(){int i[~0U];}fonctionne.
Csq

Ne fonctionne pas pour moi après avoir configuré manuellement une pile de 4 Go.
FUZxxl

@FUZxxl Intéressant; sont vos bits 32 bits? Si oui, sizeof(i)est de 16 Go. L'utilisation d'un suffixe ulou d' un ullsuffixe fait-elle une différence? Certains systèmes surchargent la mémoire et ne se bloquent que si la mémoire est écrite.
Jens

10

GolfScript (8 caractères)

{]}333*`

Résultat:

$ 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

Fondamentalement, cela crée une structure de données fortement imbriquée, puis déborde de la pile lorsque vous essayez de la transformer en chaîne.


Pour moi, cela ne jette pas une erreur, mais des sorties[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[""]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]]]]]]]]]]] (and so on, output too long for comments)
ProgramFOX le

@ProgramFOX, il y aura une valeur que vous pourrez remplacer 333et qui cèdera. 333C’était la plus petite valeur qui m’ait cassé pour moi, mais si vous avez une version différente de Ruby (ou peut-être la même version sous un système d’exploitation différent, pour autant que je sache), elle pourrait gérer un nombre différent de cadres de pile avant de déborder.
Peter Taylor

1
Breaks à 3192 sur ma machine, fonctionne donc 6.?toujours sans ajouter de caractères.
Dennis

10

Assemblage x86, syntaxe NASM, 7 octets

db"Pëý"

"Pëý" est 50 EB FD en hexadécimal, et

_loop:
push eax
jmp _loop

en assemblage x86.


8

Rubis, 12

eval"[]"*9e3

Donne

SystemStackError: stack level too deep

Probablement dépendant du système, mais vous pouvez ajouter des ordres de grandeur en rapprochant le dernier chiffre (non recommandé).

Modifier pour l'explication: comme dans d'autres exemples, cela crée une chaîne de [][][]... répétée 9000 fois, puis l'évalue: la plus à droite []est analysée comme un appel de fonction au reste, etc. Si elle commence réellement au début, elle générera une ArgumentError car il []s'agit d'un objet avec une []méthode qui nécessite un argument, mais ma machine génère une erreur un peu avant que la pile dépasse 9 000.


hmm ... s'est écrasé IRB: P
Poignée de porte

Quelle version? ruby1.9.2 génère «ArgumentError: nombre d'arguments incorrect (0 pour 1..2)».
Manatwork

Trouvé un ancien ruby1.8.7. Là, le code posté fonctionne comme décrit.
Manatwork

Odd, cela fonctionne sur mes 1.8.7, 1.9.2 et 1.9.3.
Histocrate

J'aurais ditdef f;f;end;f
EMBLEM

8

Rebol (11 Chars)

do s:[do s]

Rendements:

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

Bien que Rebol ait des fonctions, des fermetures et des objets… cela ne définit aucun de ceux-ci. Il définit une structure de données qui, dans le paradigme code en tant que données, peut être traitée comme un code utilisant DO.

Nous pouvons approfondir la question de "qu'est-ce que S" avec le REPL:

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

>> type? s
== block!

>> length? s
== 2

>> type? first s
== word!

>> type? second s
== word!

NE transforme jamais cela en une fonction, il appelle l'évaluateur dans l'environnement actuel de la structure.


1
+1 ... Je n'avais pas remarqué que ma réponse définissait une fonction et que c'était contraire aux règles, mais j'ai modifié ma réponse pour utiliser DO ... puis j'ai remarqué que vous aviez déjà soumis cette réponse. Donc, je viens de supprimer le mien, mais depuis que j'ai écrit pourquoi ceci ne définit pas un objet / une fonction / une fermeture, je pensais mettre l'explication dans le vôtre. Aussi, je pense que le do do do do est assez drôle et mérite d’être inclus. :-) J'espère que ça va!
Dr. Rebmu

7

C, 35 caractères

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

Pourquoi stocker quoi que ce soit dans l'espace attribué?
Peter Taylor

1
Dans ce cas, il est impossible de résoudre ce problème en C.
FUZxxl

3
@dmckee, toutes les erreurs de segmentation ne sont pas des débordements de pile, mais je dirais que c'est le cas, car elles résultent d'un dépassement de la capacité de la pile.
Ugoren

1
@dmckee, alloca alloue depuis la pile.
Ugoren

1
@PeterTaylor: Cela dépend probablement de la mise en œuvre, mais dans mon cas, la alloca(1)traduction est essentiellement traduite de sub $1, %espmanière à ne pas toucher à la pile.
Job

7

Common Lisp, 7 caractères

#1='#1#

Magnifique ... Je prévoyais utiliser #1=(#1#)pour le terminal et (print #1=(#1#)), mais votre solution est tellement meilleure.
protiste

En réalité, cela ne déborde pas au moment de la lecture, mais uniquement lorsque vous essayez de l’imprimer. Donc, mis à part la différence d'un caractère, le vôtre ne vaut pas mieux.
protiste

Vous avez raison, venez de modifier cela. Je ne sais pas s'il existe un moyen de provoquer un débordement au moment de la lecture.
Erik Haliewicz

En fait, #. # 1 = '# 1 # provoque un débordement en lecture :-)
Erik Haliewicz

7

Python - 11 caractères

exec'('*999

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

Solution très intelligente.
mbomb007

7

Calculatrice Casio, 11 touches

Il est assez difficile de compter les octets / jetons dans cette "langue" - j'ai donné le nombre de touches requis, à l'exclusion de Shift, Alpha (la touche de la deuxième touche) et =à la fin - cela correspond certainement à 1 octet par touche.

Testé sur le modèle fx-85GT PLUS , qui est une calculatrice scientifique standard, non graphique, "non programmable". D'autres modèles fonctionneront.

Il suffit d'empiler 11 racines de cube:

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

Il ne donne même pas d'erreur de syntaxe sur le nombre manquant sous la racine carrée.

Cela ne semble pas fonctionner avec des racines carrées.

Sinon, répétez cos(31 fois.

Sortie

Stack ERROR

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

Je crois que cela peut être qualifié de débordement de pile. La pile semble être minuscule ...


J'ai toujours pensé que cela s'appelait erreur de pile parce que vous "empiliez" trop de racines: P
FlipTack

Ma calculatrice Canon donne une erreur de pile avec à peu près n'importe quel opérateur (à l'exception des +, -, * et / au moins) si elle est répétée 25 fois ou plus. Par exemple, cela provoque une erreur de pile (sans erreur de syntaxe):(((((((((((((((((((((((((
Steadybox

7

FORTH, 13 octets

BEGIN 1 AGAIN

déborde de la pile de valeurs


: X X ; X(9) doit déborder de la pile de retour
AMK le

ne fonctionnera pas (X n'est pas défini lors de la définition de l'appel et il s'agit d'une référence / récursivité automatique
phénomène de cliquet

@ratchetfreak, ces mots de contrôle ne peuvent être utilisés que dans un état de compilation, ils doivent donc être enveloppés dans une :... ;définition de mot. Cela ajoute au moins 6 caractères, plus au moins 2 autres pour l’exécuter en tant que programme. Vous pourriez être en mesure de le faire plus court, mais voici un exemple: : F BEGIN 1 AGAIN ; F. Je suggère cela parce que la question demande: "Écris un programme." Quoi qu'il en soit, vous avez donné un vote positif pour Forth, quel que soit le nombre de personnages! :-)
Darren Stone

6

Postscript, 7

{1}loop

Par exemple.

$ 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 caractères

\end\end

C'est le même code utilisé dans cette réponse . Pour l' essentiel, la \endmacro se développe à plusieurs reprises, ce qui entraîne un débordement de pile: TeX capacity exceeded, sorry [input stack size=5000]. Une explication plus détaillée peut être trouvée ici .


5

PHP 5.4, 33 caractères

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

Cela provoque un débordement de pile lorsque les objets imbriqués stdClass sont automatiquement détruits:

$ 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 pour ce qui doit être la deuxième apparition de PHP sur CodeGolf!
Bojangles

5

Q / k (16 caractères)

Pas sûr que ce soit dans l'esprit du défi mais je ne pense pas que cela enfreigne les règles:

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

Dommage que C # nécessite tant de frappe, vous avez inspiré ma réponse!
Andrew Gray

5

Un groupe dans le même style:

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)

En Python x=lambda y:y(y);x(x)est plus court (20 caractères). Cette fonction n'est pas récursive. x appelle toute fonction qui lui est transmise en tant qu'argument.
AMK

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

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

Vous utilisez simplement la récursivité, alors pourquoi ne pas le faire, par exemple dans JS: (fonction x () {x ()}) ()?
xem

@xem Requirements dit non récursivité, c'est pourquoi.
Danny

5

C #: 106 86 58 46 32 28

32 : Les Getters peuvent SO votre machine facilement en C #:

public int a{get{return a;}}

1
Pas besoin de passeurpublic int a {get{return a;}}
Mike Koder

3
Ceci enfreint la règle "Vous n'êtes pas autorisé à définir une fonction qui s'appelle elle-même". Certes, il est caché derrière le sucre de syntaxe, mais il manque toujours le but du défi.
Peter Taylor

Ajouter le setter contourne quelque peu la règle, car vous avez maintenant deux fonctions qui s'appellent. Mais je me demande: est-ce que cela viole toujours les intentions du PO derrière ce défi?
Andrew Gray

1
Si je comprends bien, l’idée est de trouver une récursion trop imbriquée dans l’interpréteur ou dans l’API standard du langage. Cela pourrait ne pas être trop facile en C #.
Peter Taylor

1
Pourquoi "chaîne publique"? "int" fonctionne aussi bien:int a { get { return a; } }
NPSF3000

5

INTERCAL, 12 octets

(1)DO(1)NEXT

Explication:

NEXTest la version d’un appel de sous-programme par INTERCAL (ou du moins, la plus proche que vous puissiez obtenir). Il pousse la position actuelle sur la NEXTpile et saute à l'étiquette donnée.

Cependant, si la NEXTlongueur de la pile dépasse 80, vous obtenez ce qui est à peu près la version INTERCAL d'un débordement de pile:

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

Essayez-le sur Ideone. .


6
"S'EST DISPARU DANS LA LAGUNE NOIRE" qu'est-ce que c'est, ArnoldC?
Addison Crump

5

Croissant Mornington, 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

Assemblage X86 (AT & T), 33 caractères

Notez que bien que j'utilise l'étiquette maincomme cible de saut, il ne s'agit pas d' une fonction récursive.

.globl main
main:push $0;jmp main

Belle idée: c'est une sorte de récursion sans récursion!
Andrea Corbellini

en utilisant a86: dd 0fdeb6010 caractères!
Skizz

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.