Найкоротша програма, яка видає помилку StackOverflow [закрита]


75

Напишіть програму, яка видає помилку StackOverflow або еквівалент мовою, що використовується. Наприклад, у java програма повинна кидатись java.lang.StackOverflowError.

Вам не дозволяється визначати функцію, яка викликає себе або новий клас (крім тієї, що містить mainjava). Він повинен використовувати класи вибраної мови програмування.

І вона не повинна викидати помилку явно.


4
Я не розумію "використовувати класи вибраної мови програмування"
Принц Джон Веслі

3
Чи добре визначити функцію, яка називає внутрішню функцію так def s{def t=s;t}?
Принц Джон Веслі

12
У більшості мов класи - це лише особливий вид структури даних, а не центр Всесвіту. Багато з них навіть не мають таку річ.
перестали повертати проти годинника,

1
Найсмішнішим є те, що мови, які потребують усунення хвостової рекурсії (та реалізації, які підтримують її, коли мови цього не потребують) --- які в цілком реальному сенсі кращі ---, знаходяться у невигідному стані. Відповідь TwiNight посилається на версію цієї версії, яка існує на переповнюванні стека з перших днів.
dmckee

1
Від java doc: кидається, коли відбувається переповнення стека, оскільки програма повторюється занадто глибоко. docs.oracle.com/javase/6/docs/api/java/lang/…
jsedano

Відповіді:


90

Befunge, 1

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

1

від коду переповнення коду гольфу


21
Пояснення: 1 - числовий літерал, який при натисканні на нього висувається до стека. У Befunge контрольний потік обертається навколо, поки він не зустріне програму @для завершення.
гістократ

6
Я не знав, що це питання у StackOverflow. Я шукав лише на цьому сайті перед публікацією.
Справжній м'який

31
Я м'яко поласканий, щоб побачити тут свою відповідь.
Патрік

4
Це працює і в <<>.
Cruncher

49

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

import sys
sys.setrecursionlimit(1)

Ця операція сама по собі є успішною, але як сценарій, так і інтерактивний негайно кидають RuntimeError: 'maximum recursion depth exceeded'згодом наслідки.

Натхненний відповіддю Ельссара.


Я думав про те, щоб поставити це як своє рішення, але не був впевнений, чи помилка може вважатися переповненням стека. Хоча, по суті, це і є, правда?
elssar

2
@elssar: Я думаю, є два способи переповнення стека: збільшити використану частину стека або зменшити невикористану частину стека. Якщо ви уявляєте, що відро наповнюється водою, ви можете переповнити його, додавши більше води, але можете також перелити його, зменшивши відро.

19

Coq

Compute 70000.

70000- це просто синтаксичний цукор для S (S ( ... (S O) ...))70000 Ss. Я думаю, що перевірка типу викликає переповнення стека.

Ось попередження, яке друкується перед виконанням команди:

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
Це, можливо, дозволить вам подумати, що Coq - це неймовірно німа мова ... смішна ...
перестала повертати проти годинника,

1
@leftaroundabout Насправді ні. Тип Nat - це піанізована цифра на рівні типу, яка повинна діяти так, ніби це пов'язаний список.
FUZxxl

1
@FUZxxl: мій коментар зовсім не мав на увазі іронічно. Вирішіть самі, чи хочете ви включити класичну логіку до цього речення чи вважаєте за краще залишатися конструктивними ...
перестали повертати проти годинника,

2
@leftaroundabout На жаль ... вибачте. Я забув, що аналізатор відмітки завжди їсть ці приємні теги & irony & gt;
FUZxxl

19

Ява - 35

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

ОП не сказала, що немає нових класів? Я не бачу public static void mainтам. Або я просто не розумію Java?
Braden Best

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

MDN каже, що evalце найкоротше.
Пітер Тейлор

5
eval.apply(0,Array(1e6))економлять 3 символи, ви можете їхати 9e9без жодних витрат
ThinkChaos

1
applyє стандартною функцією ECMAScript. Немає нічого від браузера. Якщо ви не говорите про справді старі браузери, але це все одно не спрацює в гіпотетичному Netscape 2 apply, оскільки Arrayклас не існує в Netscape 2.
Конрад Боровський,

1
новий найкоротший в ES6:eval(...Array(9e9))
Патрік Робертс

1
Можливо, нестандартне, кидає в Chrome з консолі. dir.apply(0,Array(1e7));
Пол J

17

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

exec('{'*99)

призводить до переповнення стека «s_push: парсер»


4
Я отримуюSyntaxError: unexpected EOF while parsing
Мартін Тома

1
Зі exec('{'*101)мноюMemoryError
Мартін Тома

4
У Python2 exec- це констатація, тому ви можете просто використовувати exec'{'*999(99 здається, що недостатньо)
gnibbler

Щоб запустити MemoryError, потрібно щонайменше 100. І це ≠ стек переповнення
noɥʇʎԀʎzɐɹƆ

13

Математика, 4 чол

x=2x

$ RecursionLimit :: reclim: перевищення глибини рекурсії 1024. >>


1
"Ви не можете визначити функцію, яка викликає себе"
Томаш,

13
Це не функція, це змінна (якщо це зовсім не так, як виглядає).
AMK

Ти сприйняв мою ідею.
PyRulez

12

Clojure, 12 годин

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

Запуск у відповіді:

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

Це нагадує мені вираз (\x.xx)(\x.xx)лямбдального числення , але я не знаю достатньо добре, щоб точно сказати, чи відбувається це. Я також не бачу, чому вищезгаданий вираз призведе до переповнення стека, тож, можливо, ти робиш якусь хитрість з Y-комбінатором? Ця відповідь мене цікавить, і пояснення було б добре.
Zwei

12

Ява - 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(), тому метод називає себе.
Справжня М'яка

1
@TrueSoft Досить впевнений, що Ява кидає StringBuilderтуди об’єкт. toStringшвидше за все, подзвонять зсередини.
Cruncher

1
До моменту компілятора та оптимізатора toString()метод закінчуєтьсяpublic java.lang.String toString() { return this.toString(); }
Джонатан Каллен

12

C, 19 байт

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

4
@Thomas Так - це переповнення стека на будь-якій машині, де локальні змінні виділяються на стеці. Оскільки мова C не має поняття індикації переповнення стека (це все невизначене поведінка; одна з них проявляється як сегментація), це абсолютно відповідає початковій вимозі.
Єнс

Добре, вибачте, прийнято.
Томаш

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-бітний ints? Якщо так, sizeof(i)це 16GB. Чи має використовуючи 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

у складі x86.


8

Рубі, 12

eval"[]"*9e3

Дає

SystemStackError: stack level too deep

Імовірно, залежить від системи, але ви можете додати порядки величини, натискаючи останню цифру вгору (не рекомендується).

Редагувати для пояснення: Аналогічно до інших прикладів, це створює рядок [][][]... повторений 9000 разів, потім оцінює його: правий крайній край []аналізується як виклик функції для решти тощо. Якщо він насправді дійшов до початку, він би кинув ArgumentError, оскільки []це об'єкт із []методом, який вимагає одного аргументу, але моя машина видає помилку трохи раніше, ніж стек перевищує дев'ять тисяч.


хм ... розбився IRB: P
Дверна ручка

Яка версія? ruby1.9.2 кидає "ArgumentError: неправильна кількість аргументів (0 для 1..2)".
манатура

Знайшли старий ruby1.8.7. Там розміщений код працює, як описано.
манатура

Як не дивно, він працює на моїх 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 ніколи не перетворює це на функцію, він викликає оцінювача в поточному середовищі структури.


1
+1 ... Я не помітив, що моя відповідь визначає функцію, яка суперечить правилам, але відредагувала мою відповідь на використання DO ... потім помітила, що ви вже подали цю відповідь. Тож я просто видалив шахту, але, оскільки я записав, чому це не визначає об'єкт / функцію / закриття, я подумав, що я поясню це. Крім того, я думаю, що робити - це щось смішно і варто включати. :-) Сподіваюся, що це нормально!
Доктор Ребму

7

C, 35 символів

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

Навіщо зберігати що-небудь у відведеному просторі?
Пітер Тейлор

1
У цьому випадку вирішити цю проблему неможливо в C.
FUZxxl

3
@dmckee, Не всі помилки сегментації - це переповнення стека, але я б сказав, що це так, оскільки це результат перевищення ємності стека.
ugoren

1
@dmckee, ALLOCA виділяє з стека.
угорен

1
@PeterTaylor: Це, мабуть, залежить від реалізації, але в моєму випадку alloca(1)в основному перекладається sub $1, %espтак, щоб стек не торкався.
Робота

7

Лист звичайний, 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

Дуже розумне рішення.
mbomb007

7

Casio Calculator, 11 натискань клавіш

На цій "мові" досить важко порахувати байти / жетони - я вказав необхідну кількість натискань клавіш, виключаючи Shift, Alpha (друга клавіша зміни) і =наприкінці - це, безумовно, вкладається в 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

ЧЕРТИ, 13 байт

BEGIN 1 AGAIN

переповнює стек значень


: X X ; X(9) повинен переповнити зворотний стек
AMK

не буде працювати (X не визначено під час визначення дзвінка, і це самодовідка / рекурсія
храповий вирод

@ratchetfreak, ці контрольні слова можна використовувати лише у стані компіляції, тому їх потрібно загорнути у :... ;слово визначення. Це додає щонайменше 6 символів, а також принаймні ще 2 для цього для виконання як програми. Ви могли б бути в змозі зробити це коротше, але ось приклад: : F BEGIN 1 AGAIN ; F. Я пропоную це, оскільки запитання задає: "Напишіть програму". У будь-якому разі, ви дали нагороду для Forth, незалежно від кількості перелічених! :-)
Даррен Стоун

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


6

LaTeX: 8 символів

\end\end

Це той самий код, який використовується у цій відповіді . За суті, \endмакро розширює себе багаторазово, в результаті чого переповнення стека: TeX capacity exceeded, sorry [input stack size=5000]. Більш детальне пояснення можна знайти тут .


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 ()

2
+1 за те, що має бути другою появою PHP на CodeGolf!
Bojangles

5

Q / k (16 символів)

Не впевнений, чи це в дусі виклику, але я не думаю, що це порушує правила:

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

Соромно, що C # вимагає стільки набору тексту, ти надихнув мою відповідь!
Ендрю Грей

5

Купа в одному стилі:

Пітона, 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: (функція x () {x ()}) ()?
xem

@xem Вимоги говорять про відсутність рекурсії, саме тому.
Денні

5

C #: 106 86 58 46 32 28

32 : Getters може так легко використовувати вашу машину в 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. .


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

4

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

Зауважте, що хоча я використовую мітку mainяк ціль стрибка, це не рекурсивна функція.

.globl main
main:push $0;jmp main

Хороша ідея: це свого роду рекурсія без рекурсії!
Андреа Корбелліні

використовуючи символи a86: dd 0fdeb6010!
Скізз

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.