Кратчайшая программа, которая выдает ошибку StackOverflow [закрыто]

75

Напишите программу, которая выдает ошибку StackOverflow или эквивалентную информацию на используемом языке. Например, в java программа должна скинуть java.lang.StackOverflowError.

Вам не разрешено определять функцию, которая вызывает себя или новый класс (кроме той, что содержится mainв Java). Следует использовать классы выбранного языка программирования.

И это не должно бросать ошибку явно.

True Soft
источник
4
Я не понимаю, "использовать классы выбранного языка программирования"
Принц Джон Уэсли
3
Это нормально, чтобы определить функцию, которая вызывает внутреннюю функцию, как это def s{def t=s;t}?
Принц Джон Уэсли
12
В большинстве языков классы являются только особым видом структуры данных, а не центром вселенной. Многие даже не имеют такой вещи.
перестал поворачиваться против часовой стрелки с
1
Самое смешное в том, что языки, которые требуют устранения хвостовой рекурсии (и реализации, которые поддерживают ее, когда языки этого не требуют) - что в очень хорошем смысле этого слова - находятся в невыгодном положении по этому поводу. Ответ TwiNight ссылается на версию этого, которая существует в переполнении стека с первых дней.
dmckee
1
Из документа Java: создается, когда переполнение стека происходит из-за слишком глубокого повторения приложения. docs.oracle.com/javase/6/docs/api/java/lang/…
jsedano

Ответы:

90

Befunge, 1

Я не знаю Befunge, но ...

1

из стека переполнения кода гольф

TwiNight
источник
21
Объяснение: 1 - это числовой литерал, который помещается в стек при обнаружении. В Befunge поток управления вращается, пока не встретится, @чтобы завершить программу.
гистократ
6
Я не знал, что был такой вопрос на StackOverflow. Я искал только на этом сайте перед публикацией.
True Soft
31
Я слегка польщен, увидев мой ответ здесь.
Патрик
4
Это работает и в> <>.
Cruncher
49

Python (2.7.3), 35 символов

import sys
sys.setrecursionlimit(1)

Эта операция сама по себе успешна, но как RuntimeError: 'maximum recursion depth exceeded'следствие , и сценарий, и интерактив будут сразу же выброшены .

Вдохновлен ответом Эльссара.

Кевин Рид
источник
Я подумал о том, чтобы вместо этого использовать это в качестве решения, но не был уверен, можно ли считать ошибку переполнением стека. Хотя, по сути, это то, что есть, верно?
Эльссар
2
@elssar: Я полагаю, что существует два способа переполнения стека: увеличить используемую часть стека или уменьшить неиспользуемую часть стека. Если вы представите, как ведро наполняется водой, вы можете переполнить его, добавив больше воды, но вы также можете переполнить его, сжимая ведро.
19

Coq

Compute 70000.

70000это просто синтаксический сахар для S (S ( ... (S O) ...))70000 S-х годов. Я думаю, что это проверка типов, которая вызывает переполнение стека.

Вот предупреждение, которое выводится перед выполнением команды:

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
источник
2
Это может заставить вас думать, что Coq - невероятно тупой язык ... забавный ...
перестал поворачиваться против часовой стрелки с
1
@leftaroundabout На самом деле нет. Тип Nat - это пиано-цифра уровня типа, которая должна действовать так, как если бы это был связанный список.
FUZxxl
1
@FUZxxl: мой комментарий вовсе не имел в виду иронию. Решите сами, хотите ли вы включить в это предложение классическую логику или предпочитаете оставаться конструктивным ...
перестал работать против часовой стрелки
2
@leftaroundabout Упс ... извините. Я забыл, что синтаксический анализатор уценки всегда ест те теги & lt; ирония & gt ;.
FUZxxl
19

Ява - 35

class S{static{new S();}{new S();}}
aditsu
источник
Разве ОП не сказал, что нет новых классов? Я не вижу public static void mainтам. Или я просто не понимаю Java?
Брэден Бест
4
@ B1KMusic Новых классов нет, есть только один класс (S). Код использует статический инициализатор, он выдает SO, прежде чем jvm обнаружит, что основного метода нет. Работает с Java 6.
Aditsu
1
Я понимаю статический блок. Но каков следующий блок?
Николас Барбулеско
1
@NicolasBarbulesco Это блок инициализатора, он выполняется при создании нового экземпляра.
aditsu
1
@LuigiCortese Я думаю, что это работает только с Java 6 или старше
aditsu
19

Javascript 24 символа

Ответ, зависящий от браузера (должен иметь доступ apply):

eval.apply(0,Array(999999))
  • eval было самое короткое имя глобальной функции, которое я мог найти (кто-нибудь знает одну, которая короче?)
  • applyпозволяет нам преобразовывать массив в параметры функции, причем первый параметр является контекстом функции ( this)
  • Array(999999)создаст массив с указанной длиной. Не уверен, что максимальное количество аргументов, но это меньше, чем это, и больше, чем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

Примечание. Из-за однопоточной природы javascript бесконечные циклы блокируют пользовательский интерфейс и никогда не вызывают исключение.

while(1);
for(;;);

Ни один из них не подходит.

Обновление - это сбривает три символа:

eval.apply(0,Array(1e7))
Shmiddty
источник
MDN говорит, что evalэто самый короткий.
Питер Тейлор
5
eval.apply(0,Array(1e6))экономит 3 символа, вы даже можете использовать их 9e9бесплатно
ThinkChaos
1
applyстандартная функция ECMAScript Нет ничего зависящего от браузера. Если вы не говорите о действительно старых браузерах, но в applyлюбом случае это не будет работать в гипотетическом Netscape 2 , потому что Arrayкласс не существует в Netscape 2.
Конрад Боровски,
1
новый самый короткий в ES6:eval(...Array(9e9))
Патрик Робертс
1
Наверное, нестандартно, кидает в Chrome с консоли. dir.apply(0,Array(1e7));
Пол Дж
17

Python 2.7 (12 символов)

exec('{'*99)

приводит к «переполнению стека парсера»

Даниил
источник
4
Я получаюSyntaxError: unexpected EOF while parsing
Мартин Тома
1
С exec('{'*101)я получаюMemoryError
Мартин Тома
4
В Python2 execэто утверждение, так что вы можете просто использовать exec'{'*999(99, кажется, недостаточно)
gnibbler
Вам нужно как минимум 100, чтобы вызвать MemoryError. И это переполнение стека
no --zɥʇʎԀʎ
13

Mathematica, 4 символа

x=2x

$ RecursionLimit :: reclim: глубина рекурсии 1024 превышена. >>

alephalpha
источник
1
«Вы не можете определить функцию, которая вызывает себя»
Томас
13
Это не функция, это переменная (если она совсем не похожа).
AMK
Вы поняли мою идею.
PyRulez
12

Clojure, 12 символов

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

Бег в репле:

user=> (#(%%)#(%%))
StackOverflowError   user/eval404/fn--407 (NO_SOURCE_FILE:1)
Дэвид Кабана
источник
Это напоминает мне выражение лямбда-исчисления (\x.xx)(\x.xx), но я недостаточно хорошо знаю clojure, чтобы точно сказать, происходит ли это так. Я также не понимаю, почему вышеупомянутое выражение может привести к переполнению стека, поэтому, возможно, вы делаете какую-то хитрость с Y-комбинатором? Этот ответ меня интересует, и объяснение было бы неплохо.
Цвей
12

Java - 113 символов

Я думаю, что это соответствует духу правила «не называть себя». Он не делает это явно, и даже проходит через конструкцию языка Java.

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

Сжатая версия:

public class S{public String toString(){return ""+this;}public static void main(String[] a){new S().toString();}}
Джо К
источник
9
Ну, ""+thisна самом деле ""+this.toString(), так метод вызывает сам себя.
True Soft
1
@TrueSoft Я уверен, что Java добавляет StringBuilderтуда объект. toStringскорее всего будет вызван изнутри.
Cruncher
1
К тому времени, когда компилятор и оптимизатор будут готовы, toString()метод в конечном итоге будетpublic java.lang.String toString() { return this.toString(); }
Джонатан Каллен
12

C 19 байтов

main(){int i[~0u];}
Jens
источник
4
@Thomas Да это переполнение стека на любом компьютере , где локальные переменные размещаются в стеке. Поскольку язык C не имеет понятия индикации переполнения стека (все это неопределенное поведение; один из них проявляется как segfault), это соответствует первоначальному требованию.
Jens
ОК, извините, принято.
Томас
3
это дает main.c:1:16: error: size of array 'i' is negativeмне на GCC 4.8.1. Версия без подписи main(){int i[~0U];}работает.
Csq
Не работает для меня после того, как я вручную настроил стек 4 ГБ.
FUZxxl
@FUZxxl Интересно; твои интты 32 битные? Если это так, sizeof(i)16 ГБ. Имеет ли значение использование ulили ullсуффикс? Некоторые системы перегружают память и дают сбой, только если в нее записана память.
Дженс
10

GolfScript (8 символов)

{]}333*`

Результат:

$ 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

В основном это создает сильно вложенную структуру данных, а затем переполняет стек при попытке превратить его в строку.

Питер Тейлор
источник
Для меня это не ошибка, а вывод[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[""]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]]]]]]]]]]] (and so on, output too long for comments)
ProgramFOX
@ProgramFOX, будет какое-то значение, которое вы можете заменить, 333и оно сломается. 333Это было наименьшее значение, которое мне не понравилось, но если у вас другая версия Ruby (или, может быть, та же версия в другой ОС, насколько я знаю), она может обработать другое количество стековых кадров перед переполнением.
Питер Тейлор
1
Разбивается на 3192 на моей машине, поэтому 6.?все равно работает без добавления символов.
Деннис
10

сборка x86, синтаксис NASM, 7 байтов

db"Pëý"

"Pëý" - 50 EB FD в шестнадцатеричном формате, и

_loop:
push eax
jmp _loop

в сборке х86.


источник
8

Руби, 12

eval"[]"*9e3

дает

SystemStackError: stack level too deep

Предположительно, зависит от системы, но вы можете добавить порядки, увеличив последнюю цифру (не рекомендуется).

Редактировать для объяснения: Подобно некоторым другим примерам, это создает строку [][][]..., повторенную 9000 раз, затем оценивает ее: самый правый []анализируется как вызов функции для остальных и так далее. Если бы он действительно попал в начало, он бы выдал ArgumentError, потому что []это объект с []методом, который требует один аргумент, но моя машина выдает ошибку немного, прежде чем размер стека превысит девять тысяч.

histocrat
источник
хм ... разбился IRB: P
дверная ручка
Какая версия? ruby1.9.2 выдает «ArgumentError: неверное количество аргументов (0 для 1..2)».
manatwork
Нашел старый ruby1.8.7. Там размещенный код работает, как описано.
manatwork
Странно, это работает на моих 1.8.7, 1.9.2 и 1.9.3.
гистократ
Я бы сказалdef f;f;end;f
ЭМБЛЕМА
8

Реболь (11 символов)

do s:[do s]

Урожайность:

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

Хотя у Rebol есть функции, замыкания и объекты ... это не определяет ни одного из них. Он определяет структуру данных, которая в парадигме код-как-данные может рассматриваться как код с использованием DO.

Мы можем исследовать вопрос «что такое S» с REPL:

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

>> type? s
== block!

>> length? s
== 2

>> type? first s
== word!

>> type? second s
== word!

DO никогда не превращает это в функцию, он вызывает оценщик в текущей среде структуры.

rgchris
источник
1
+1 ... Я не заметил, что мой ответ определял функцию, и это противоречило правилам, но отредактировал мой ответ, используя DO ..., а затем заметил, что вы уже отправили этот ответ. Поэтому я просто удалил свой, но так как я написал, почему это не определяет объект / функцию / замыкание, я решил добавить объяснение в ваше. Также я думаю, что do do do do довольно забавно и стоит того, чтобы его включить. :-) Надеюсь, все в порядке!
Доктор Ребму
7

C, 35 символов

main(){for(;;)*(int*)alloca(1)=0;}
работа
источник
Зачем хранить что-либо в отведенном месте?
Питер Тейлор
1
В этом случае невозможно решить эту проблему в C.
FUZxxl
3
@dmckee, Не все ошибки сегментации являются переполнением стека, но я бы сказал, что это так, потому что это результат превышения емкости стека.
Угорен
1
@dmckee, alloca выделяет из стека.
Угорен
1
@PeterTaylor: Вероятно, это зависит от реализации, но в моем случае alloca(1)это в основном перевод, sub $1, %espпоэтому стек не затрагивается.
Работа
7

Common Lisp, 7 символов

#1='#1#
Эрик Халевич
источник
Прекрасно ... Я планировал использовать #1=(#1#)для терминала и (print #1=(#1#)), но ваше решение намного лучше.
Протист
На самом деле это не переполняется во время чтения, только когда вы пытаетесь распечатать его. Так что, кроме разницы в 1 символ, твоя не лучше.
Протист
Вы правы, только что отредактировали это. Я не уверен, есть ли способ вызвать переполнение во время чтения.
Эрик Халевич
На самом деле, #. # 1 = '# 1 # вызывает переполнение во время чтения :-)
Эрик Халевич
7

Питон - 11 символов

exec'('*999

>>> exec'('*999
s_push: parser stack overflow
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
MemoryError
gnibbler
источник
Очень умное решение.
mbomb007
7

Casio Calculator, 11 клавиш

В этом «языке» довольно сложно сосчитать байты / токены - я указал требуемое количество нажатий клавиш, за исключением Shift, Alpha (вторая клавиша Shift) и =в конце - это, безусловно, укладывается в 1 байт на нажатие клавиши.

Протестировано на модели fx-85GT PLUS , которая представляет собой стандартный не программируемый «непрограммируемый» научный калькулятор. Другие модели будут работать.

Просто сложите 11 кубических корней:

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

Это даже не дает синтаксической ошибки о пропущенном числе под квадратным корнем.

Это не похоже на квадратные корни.

Как вариант, повторите cos(31 раз.

Выход

Stack ERROR

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

Я считаю, что это квалифицируется как переполнение стека. Стек кажется крошечным ...


источник
Я всегда думал, что это вызвано ошибкой стека, потому что вы «сложили» слишком много корней: P
FlipTack
Мой калькулятор Canon выдает ошибку стека практически с любым оператором (кроме как минимум +, -, * и /), если она повторяется 25 или более раз. Например, это вызывает ошибку стека (без синтаксической ошибки):(((((((((((((((((((((((((
Steadybox
7

FORTH, 13 байтов

BEGIN 1 AGAIN

переполняет стек значений

чокнутый урод
источник
: X X ; X(9) должен переполнить возвращаемый стек
AMK
не будет работать (X не определен при определении вызова, и это самостоятельная ссылка / рекурсия
трещотка урод
@ratchetfreak, эти контрольные слова могут использоваться только в состоянии компиляции, поэтому их нужно заключить в :... ;определение слова. Это добавляет как минимум 6 символов, плюс еще как минимум 2 для выполнения этой программы. Вы могли бы быть в состоянии сделать это короче, но вот пример: : F BEGIN 1 AGAIN ; F. Я предлагаю это, потому что вопрос задает: «Написать программу». В любом случае, дал вам голосование за Форт, независимо от количества символов! :-)
Даррен Стоун
6

Постскриптум, 7

{1}loop

Например.

$ 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

Haskell (GHC, без оптимизации), 25

main=print$sum[1..999999]

сумма ленивая в общем. Это накапливает кучу блоков, а затем пытается оценить их все в конце, что приводит к переполнению стека.

Джои Адамс
источник
я всегда думал, что сумма была реализована с использованием foldl '. не так ли?
гордый haskeller
Увы, это не так: hackage.haskell.org/package/base/docs/src/Data-List.html#sum
Джои Адамс
6

Латекс: 8 символов

\end\end

Это тот же код, который используется в этом ответе . По существу, \endмакро расширяет себя многократно, в результате чего переполнение стека: TeX capacity exceeded, sorry [input stack size=5000]. Более подробное объяснение можно найти здесь .

bwDraco
источник
5

PHP 5.4, 33 символа

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

Это вызывает переполнение стека, когда вложенные объекты stdClass автоматически уничтожаются:

$ 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
источник
2
+1 за то, что должно быть вторым появлением PHP на CodeGolf!
Bojangles
5

Q / K (16 символов)

Не уверен, что это в духе задачи, но я не думаю, что это нарушает правила:

s:{f`};f:{s`};f`
skeevey
источник
Обидно, C # требует так много печатать, ты вдохновил мой ответ!
Эндрю Грей,
5

Связка в том же стиле:

Python, 30

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

Javascript, 38

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

Луа, 44

(function(x) x(x) end)(function(y) y(y) end)
Эрик
источник
В Python x=lambda y:y(y);x(x)короче (20 символов). Эта функция не является рекурсивной. x вызывает любую функцию, переданную ему в качестве аргумента.
AMK
Ruby 2.0 -->x{x[x]}[->y{y[y]}]
Джон Дворжак
Mathematica#@#&[#@#&]
алефальфа
Вы просто используете рекурсию, тогда почему бы не сделать это, например, в JS: (function x () {x ()}) ()?
xem
@xem Требования говорят, что нет рекурсии, вот почему.
Дэнни
5

C #: 106 86 58 46 32 28

32 : добытчики могут ТАК легко ваша машина в C #:

public int a{get{return a;}}
Эндрю Грей
источник
1
Нет необходимости в сеттереpublic int a {get{return a;}}
Майк Кодер
3
Это нарушает правило «Вам не разрешено определять функцию, которая вызывает себя». По общему признанию это скрыто за синтаксическим сахаром, но это все еще не решает проблему.
Питер Тейлор
Добавление сеттера несколько обходит правило, потому что теперь у вас есть две функции, вызывающие друг друга. Но мне интересно: это все еще нарушает намерения ОП, стоящие за этим вызовом?
Эндрю Грей,
1
Насколько я понимаю, идея состоит в том, чтобы найти некоторую чрезмерно вложенную рекурсию в интерпретаторе или стандартном API языка. Это может быть не так просто в C #.
Питер Тейлор
1
Почему "публичная строка"? "int" работает так же хорошо:int a { get { return a; } }
NPSF3000
5

INTERCAL, 12 байт

(1)DO(1)NEXT

Объяснение:

NEXTявляется версией вызова подпрограммы INTERCAL (или, по крайней мере, ближайшей, которую вы можете получить). Он помещает текущую позицию в NEXTстек и переходит к данной метке.

Однако, если NEXTдлина стека превышает 80, вы получите то, что в значительной степени является INTERCAL-версией переполнения стека:

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

Попробуйте это на Ideone. ,

kirbyfan64sos
источник
6
«Исчезла в чёрной лагуне», что это, Арнольд?
Эддисон Крамп
5

Морнингтон Полумесяц, 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
pppery
источник
4

Сборка X86 (AT & T), 33 символа

Обратите внимание, что хотя я использую метку mainв качестве цели перехода, это не рекурсивная функция.

.globl main
main:push $0;jmp main
работа
источник
Хорошая идея: это своего рода рекурсия без рекурсии!
Андреа Корбеллини
используя a86: dd 0fdeb6010 символов!
Skizz
4

Python (17):

c='exec c';exec c
ɐɔıʇǝɥʇuʎs
источник
Хм, я получаюKeyError: 'unknown symbol table entry'
Stefreak