Program terpendek yang melempar Kesalahan StackOverflow [ditutup]


75

Tulis program yang melontarkan Kesalahan StackOverflow atau yang setara dalam bahasa yang digunakan. Sebagai contoh, di java , program harus membuang java.lang.StackOverflowError.

Anda tidak diizinkan untuk mendefinisikan fungsi yang memanggil dirinya sendiri atau kelas baru (kecuali yang berisi mainjava). Seharusnya menggunakan kelas bahasa pemrograman yang dipilih.

Dan seharusnya tidak membuang kesalahan secara eksplisit.


4
Saya tidak mengerti "gunakan kelas-kelas bahasa pemrograman yang dipilih"
Pangeran John Wesley

3
Apakah boleh mendefinisikan fungsi yang memanggil fungsi dalam seperti ini def s{def t=s;t}?
Pangeran John Wesley

12
Di sebagian besar bahasa, kelas hanyalah jenis struktur data khusus, bukan pusat alam semesta. Banyak yang bahkan tidak memiliki hal seperti itu.
Berhenti menghidupkan counterclockwis

1
Yang lucu di sini adalah bahwa bahasa yang membutuhkan penghapusan rekursi ekor (dan implementasi yang mendukungnya ketika bahasa tidak memerlukannya) --- yang dalam arti yang sangat nyata lebih baik --- berada pada posisi yang kurang menguntungkan dalam hal ini. Tautan jawaban TwiNight ke versi ini yang ada di Stack Overflow sejak awal.
dmckee

1
Dari java doc: Dilemparkan ketika stack overflow terjadi karena suatu aplikasi berulang terlalu dalam. docs.oracle.com/javase/6/docs/api/java/lang/…
jsedano

Jawaban:


90

Jalanan, 1

Saya tidak tahu Befunge, tapi ...

1

dari Stack overflow code golf


21
Penjelasan: 1 adalah literal numerik yang didorong ke tumpukan saat ditemui. Di Befunge, aliran kontrol membungkus sampai bertemu sebuah @untuk mengakhiri program.
histokrat

6
Saya tidak tahu ada pertanyaan tentang StackOverflow ini. Saya mencari hanya di situs ini sebelum memposting.
True Soft

31
Saya sedikit tersanjung melihat jawaban saya di sini.
Patrick

4
Ini bekerja di> <> juga.
Cruncher

49

Python (2.7.3), 35 karakter

import sys
sys.setrecursionlimit(1)

Operasi ini sendiri berhasil, tetapi baik skrip dan interaktif akan segera dibuang RuntimeError: 'maximum recursion depth exceeded'setelahnya.

Terinspirasi oleh jawaban elssar.


Saya berpikir tentang menempatkan itu sebagai solusi saya sebagai gantinya, tetapi tidak yakin apakah kesalahan itu dapat dianggap sebagai stack overflow. Padahal, pada dasarnya, memang begitu, kan?
elssar

2
@elssar: Saya kira ada dua cara untuk meluap stack: membuat bagian yang digunakan stack lebih besar, atau membuat bagian stack yang tidak digunakan lebih kecil. Jika Anda membayangkan ember mengisi air, Anda bisa meluap dengan menambahkan lebih banyak air, tetapi Anda juga bisa melimpah dengan menyusutkan ember.

19

Coq

Compute 70000.

70000hanya gula sintaksis untuk S (S ( ... (S O) ...))dengan 70000 S-an. Saya pikir itu adalah pemeriksa tipe yang menyebabkan stack overflow.

Berikut peringatan yang dicetak sebelum perintah dijalankan:

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
Itu mungkin membuat Anda berpikir Coq adalah bahasa yang sangat bodoh ... lucu ...
berhenti mengubah counterclockwis

1
@leftaroundabout Sebenarnya tidak. Tipe Nat adalah tipe angka peano angka yang harus bertindak seolah-olah itu adalah daftar tertaut.
FUZxxl

1
@ FuZxxl: komentar saya tidak berarti ironis sama sekali. Putuskan sendiri apakah Anda ingin memasukkan logika klasik ke dalam kalimat itu, atau lebih memilih untuk tetap membangun ...
berhenti mengubah counterclockwis

2
@leftaroundabout Ups ... maaf. Saya lupa bahwa parser penurunan harga selalu memakan yang bagus & lt; ironi & gt; -tags.
FUZxxl

19

Jawa - 35

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

Bukankah OP mengatakan tidak ada kelas baru? Saya tidak melihat public static void maindi sana. Atau apakah saya hanya gagal memahami Java?
Braden Best

4
@ B1KMusic Tidak ada kelas baru, hanya ada satu kelas (S). Kode menggunakan initializer statis, ia melempar SO sebelum angka jvm keluar tidak ada metode utama. Bekerja dengan java 6.
aditsu

1
Saya mengerti blok statis. Tapi apa blok selanjutnya?
Nicolas Barbulesco

1
@NicolasBarbulesco Itu blok penginisialisasi, dijalankan ketika Anda membuat instance baru.
aditsu

1
@LuigiCortese Saya pikir ini hanya bekerja dengan java 6 atau lebih
aditsu

19

Javascript 24 karakter

Jawaban ketergantungan browser (harus memiliki akses ke apply):

eval.apply(0,Array(999999))
  • eval adalah nama fungsi global terpendek yang dapat saya temukan (ada yang tahu yang lebih pendek?)
  • applymemungkinkan kita untuk mengubah array menjadi parameter fungsi, parameter pertama menjadi konteks fungsi ( this)
  • Array(999999)akan membuat array dengan panjang yang terdaftar. Tidak yakin berapa jumlah argumen maksimum, tetapi kurang dari ini, dan lebih dari itu99999

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

Catatan - Karena sifat javascript berulir tunggal, loop tak terbatas akhirnya mengunci UI dan tidak pernah melempar pengecualian.

while(1);
for(;;);

Tak satu pun dari ini memenuhi syarat.

Perbarui - ini memangkas tiga karakter:

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

MDN mengatakan itu evaladalah yang terpendek.
Peter Taylor

5
eval.apply(0,Array(1e6))menghemat 3 karakter, Anda bahkan dapat menggunakannya 9e9tanpa biaya
ThinkChaos

1
applyadalah fitur standar ECMAScript. Tidak ada yang bergantung pada browser. Kecuali Anda berbicara tentang peramban yang benar-benar tua, tetapi ini tidak akan berhasil dalam hipotesis Netscape 2 apply, karena Arraykelas tidak ada di Netscape 2.
Konrad Borowski

1
baru terpendek di ES6:eval(...Array(9e9))
Patrick Roberts

1
Mungkin tidak standar, melempar Chrome dari konsol. dir.apply(0,Array(1e7));
Paul J

17

Python 2.7 (12 karakter)

exec('{'*99)

hasil dalam «s_push: overflow tumpukan parser»


4
Saya dapatSyntaxError: unexpected EOF while parsing
Martin Thoma

1
Dengan exec('{'*101)saya dapatkanMemoryError
Martin Thoma

4
Dalam Python2, execadalah pernyataan, jadi Anda bisa menggunakan exec'{'*999(99 sepertinya tidak cukup)
gnibbler

Anda memerlukan setidaknya 100 untuk memicu MemoryError. Dan itu ≠ stack overflow
noɥʇʎԀʎzɐɹƆ

13

Mathematica, 4 karakter

x=2x

$ RecursionLimit :: reclim: Melampaui kedalaman 1024. >>


1
"Anda mungkin tidak mendefinisikan fungsi yang memanggil dirinya sendiri"
Tomas

13
Itu bukan fungsi, itu variabel (kecuali jika tidak sama sekali seperti apa).
AMK

Anda mengambil ide saya.
PyRulez

12

Clojure, 12 karakter

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

Berjalan di balasan:

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

Ini mengingatkan saya pada ekspresi kalkulus lambda (\x.xx)(\x.xx), tapi saya tidak tahu cukup baik untuk mengatakan dengan pasti apakah ini yang terjadi. Saya juga tidak melihat mengapa ekspresi yang disebutkan di atas akan menghasilkan stack overflow, jadi mungkin Anda melakukan beberapa tipu daya dengan Y-combinator? Jawaban ini menarik minat saya dan penjelasannya akan menyenangkan.
Zwei

12

Java - 113 karakter

Saya pikir ini tetap dalam semangat aturan "metode self-calling". Itu tidak melakukannya secara eksplisit, dan bahkan melewati konstruksi bahasa Jawa.

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

Versi Ringkas:

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

9
Ya, ""+thissebenarnya ""+this.toString(), jadi metode ini memanggil dirinya sendiri.
True Soft

1
@ TrueSoft Cukup yakin java melempar StringBuilderobjek di sana. toStringkemungkinan akan dipanggil dari dalam sana.
Cruncher

1
Pada saat kompiler dan pengoptimal selesai, toString()metode akhirnya menjadipublic java.lang.String toString() { return this.toString(); }
Jonathan Callen

12

C, 19 byte

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

4
@Thomas Ya itu adalah sebuah stack overflow pada setiap mesin di mana variabel lokal yang dialokasikan pada stack. Karena bahasa C tidak memiliki konsep indikasi stack overflow (itu semua perilaku yang tidak terdefinisi; salah satunya memanifestasikan dirinya sebagai segfault), ini tidak sesuai dengan persyaratan asli.
Jens

Oke, maaf, diterima.
Tomas

3
itu memberi main.c:1:16: error: size of array 'i' is negativesaya pada gcc 4.8.1. Versi yang tidak ditandatangani main(){int i[~0U];}berfungsi.
Csq

Tidak berfungsi untuk saya setelah saya mengkonfigurasi tumpukan 4GB secara manual.
FUZxxl

@FUZxxl Menarik; Apakah ints Anda 32 bit? Jika demikian, sizeof(i)16GB. Apakah menggunakan ulatau ullakhiran membuat perbedaan? Beberapa sistem membuat memori berlebih dan hanya macet jika memori ditulis.
Jens

10

GolfScript (8 karakter)

{]}333*`

Hasil:

$ 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

Pada dasarnya ini menciptakan struktur data yang sangat bersarang dan kemudian meluap tumpukan ketika mencoba mengubahnya menjadi string.


Bagi saya, ini tidak menimbulkan kesalahan, tetapi hasilnya[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[""]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]]]]]]]]]]] (and so on, output too long for comments)
ProgramFOX

@ProgramFOX, akan ada beberapa nilai yang dapat Anda ganti 333dengan dan itu akan rusak. 333adalah nilai terkecil yang mematahkan bagi saya, tetapi jika Anda memiliki versi Ruby yang berbeda (atau mungkin versi yang sama pada OS yang berbeda, untuk semua yang saya tahu) itu mungkin menangani jumlah bingkai tumpukan yang berbeda sebelum meluap.
Peter Taylor

1
Istirahat pada 3192 di mesin saya, jadi 6.?masih berfungsi tanpa menambahkan karakter.
Dennis

10

perakitan x86, sintaks NASM, 7 byte

db"Pëý"

"Pëý" adalah 50 EB FD dalam heksadesimal, dan

_loop:
push eax
jmp _loop

dalam perakitan x86.


8

Ruby, 12

eval"[]"*9e3

Memberi

SystemStackError: stack level too deep

Agaknya tergantung pada sistem, tetapi Anda dapat menambahkan urutan besarnya dengan menabrak digit terakhir ke atas (tidak disarankan).

Sunting untuk penjelasan: Sama halnya dengan beberapa contoh lainnya, ini menciptakan serangkaian [][][]... diulangi 9000 kali, kemudian mengevaluasinya: paling kanan []diuraikan sebagai pemanggilan fungsi ke yang lainnya, dan seterusnya. Jika itu benar-benar sampai ke permulaan, itu akan melempar ArgumentError karena []merupakan objek dengan []metode yang membutuhkan satu argumen, tetapi mesin saya melempar kesalahan sedikit sebelum tumpukan lebih dari sembilan ribu.


hmm ... menabrak IRB: P
Gagang Pintu

Versi yang mana? ruby1.9.2 melempar “ArgumentError: jumlah argumen yang salah (0 untuk 1..2)”.
manatwork

Ditemukan yang lama ruby1.8.7. Di sana kode yang diposting berfungsi seperti yang dijelaskan.
manatwork

Aneh, ini berfungsi pada 1.8.7, 1.9.2, dan 1.9.3 saya.
histokrat

Saya akan mengatakandef f;f;end;f
EMBLEM

8

Rebol (11 Karakter)

do s:[do s]

Hasil:

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

Meskipun Rebol memiliki fungsi, penutupan, dan objek ... ini tidak mendefinisikan semua itu. Ini mendefinisikan struktur data, yang dalam paradigma kode-sebagai-data dapat diperlakukan sebagai kode menggunakan DO.

Kita dapat menyelidiki pertanyaan "apa itu S" dengan REPL:

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

>> type? s
== block!

>> length? s
== 2

>> type? first s
== word!

>> type? second s
== word!

DO tidak pernah mengubah ini menjadi fungsi, ia memanggil evaluator di lingkungan saat ini pada struktur.


1
+1 ... Saya tidak memperhatikan bahwa jawaban saya mendefinisikan fungsi dan itu melanggar aturan, tetapi mengedit jawaban saya untuk menggunakan DO ... lalu perhatikan bahwa Anda sudah mengirimkan jawaban itu. Jadi saya baru saja menghapus milik saya, tetapi karena saya sudah menulis mengapa ini tidak mendefinisikan objek / fungsi / penutupan saya pikir saya akan memasukkan penjelasan ke dalam milik Anda. Juga saya pikir do do do agak lucu dan layak termasuk. :-) Semoga tidak apa-apa!
Dr. Rebmu

7

C, 35 karakter

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

Mengapa menyimpan sesuatu di ruang yang ditentukan?
Peter Taylor

1
Dalam hal ini, tidak mungkin untuk menyelesaikan masalah ini dalam C.
FUZxxl

3
@ dmckee, Tidak semua kesalahan segmentasi adalah stack overflows, tapi menurut saya ini salah, karena itu hasil dari melebihi kapasitas stack.
ugoren

1
@ dmckee, alokasikan mengalokasikan dari tumpukan.
ugoren

1
@PeterTaylor: Mungkin tergantung pada implementasi tetapi dalam kasus saya alloca(1)pada dasarnya diterjemahkan sub $1, %espsehingga tumpukan tidak tersentuh.
Ayub

7

Gangguan Umum, 7 karakter

#1='#1#

Cantik ... Saya berencana untuk menggunakan #1=(#1#)terminal dan (print #1=(#1#)), tetapi solusi Anda jauh lebih baik.
Protista

Sebenarnya itu tidak meluap saat dibaca, hanya ketika Anda mencoba mencetaknya. Jadi selain dari perbedaan 1 karakter, Anda tidak lebih baik.
Protista

Anda benar, baru saja mengeditnya. Saya tidak yakin apakah ada cara untuk menyebabkan meluap pada waktu baca.
Erik Haliewicz

Sebenarnya, #. # 1 = '# 1 # menyebabkan baca-waktu meluap :-)
Erik Haliewicz

7

Python - 11 karakter

exec'('*999

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

Solusi yang sangat pintar.
mbomb007

7

Casio Calculator, 11 penekanan tombol

Cukup sulit untuk menghitung byte / token dalam "bahasa" ini - saya telah memberikan jumlah penekanan tombol yang diperlukan, tidak termasuk Shift, Alpha (tombol shift kedua) dan = pada akhirnya - ini tentu saja cocok menjadi 1 byte per penekanan tombol.

Diuji pada fx-85GT PLUS , yang merupakan kalkulator ilmiah standar, non-grafik, "tidak dapat diprogram". Model-model lain akan berfungsi.

Cukup dengan menumpuk 11 akar pangkat tiga:

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

Bahkan tidak memberikan kesalahan sintaks tentang nomor yang hilang di bawah akar kuadrat.

Ini sepertinya tidak bekerja dengan akar kuadrat.

Atau, ulangi cos( 31 kali.

Keluaran

Stack ERROR

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

Saya percaya bahwa ini memenuhi syarat sebagai stack overflow. Tumpukan tampaknya kecil ...


Saya selalu berpikir itu disebut stack error karena Anda "menumpuk" terlalu banyak root: P
FlipTack

Kalkulator Canon saya memberikan kesalahan tumpukan pada hampir semua operator (tidak termasuk setidaknya +, -, * dan /) jika diulang 25 kali atau lebih. Misalnya, ini menyebabkan kesalahan tumpukan (tanpa kesalahan sintaksis):(((((((((((((((((((((((((
Steadybox

7

FORTH, 13 byte

BEGIN 1 AGAIN

meluap tumpukan nilai


: X X ; X(9) harus melimpah stack kembali
AMK

tidak akan berfungsi (X tidak didefinisikan saat mendefinisikan panggilan dan itu adalah referensi / rekursi sendiri
ratchet freak

@ scratchetfreak, kata-kata kontrol itu hanya bisa digunakan dalam keadaan kompilasi, jadi kata-kata itu harus dibungkus dengan :... ;definisi kata. Itu menambahkan setidaknya 6 karakter, ditambah setidaknya 2 lagi untuk dieksekusi sebagai program. Anda mungkin bisa melakukannya lebih pendek, tapi inilah contoh: : F BEGIN 1 AGAIN ; F. Saya menyarankan ini karena pertanyaannya adalah: "Tulis program." Bagaimanapun, memberi Anda upvote untuk Forth, terlepas dari jumlah char! :-)
Darren Stone

6

Catatan tambahan, 7

{1}loop

Misalnya.

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

\end\end

Ini adalah kode yang sama dengan yang digunakan dalam jawaban ini . Pada dasarnya, \endmakro mengembang sendiri berulang kali, sehingga stack overflow: TeX capacity exceeded, sorry [input stack size=5000]. Penjelasan lebih rinci dapat ditemukan di sini .


5

PHP 5.4, 33 karakter

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

Ini menyebabkan stack overflow ketika objek stdClass bersarang dihancurkan secara otomatis:

$ 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 untuk apa yang harus menjadi penampilan kedua PHP di CodeGolf!
Bojangles

5

Q / k (16 karakter)

Tidak yakin apakah ini dalam semangat tantangan tapi saya tidak berpikir itu melanggar aturan:

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

Sayang sekali C # membutuhkan banyak pengetikan, Anda mengilhami jawaban saya!
Andrew Gray

5

Banyak dengan gaya yang sama:

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)

Dalam Python x=lambda y:y(y);x(x)lebih pendek (20 karakter). Fungsi ini tidak rekursif. x memanggil fungsi apa saja yang diteruskan sebagai argumen.
AMK

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

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

Anda hanya menggunakan rekursi, lalu mengapa tidak melakukan hal itu, misalnya di JS: (fungsi x () {x ()}) ()?
xem

@xem Persyaratan mengatakan tidak ada rekursi, itu sebabnya.
Danny

5

C #: 106 86 58 46 32 28

32 : Getters can SO mesin Anda mudah di C #:

public int a{get{return a;}}

1
Tidak perlu untuk setterpublic int a {get{return a;}}
Mike Koder

3
Ini melanggar aturan "Anda tidak diizinkan untuk mendefinisikan fungsi yang memanggil dirinya sendiri". Memang itu tersembunyi di balik sintaksis gula, tetapi masih kehilangan titik tantangan.
Peter Taylor

Menambahkan setter agak menghindari aturan, karena Anda sekarang memiliki dua fungsi yang saling memanggil. Tapi saya bertanya-tanya: apakah itu masih melanggar niat OP di balik tantangan ini?
Andrew Gray

1
Idenya seperti yang saya pahami adalah untuk menemukan beberapa rekursi bersarang secara berlebihan dalam interpreter atau API standar bahasa. Ini mungkin tidak terlalu mudah di C #.
Peter Taylor

1
Mengapa "tali publik"? "int" juga berfungsi:int a { get { return a; } }
NPSF3000

5

INTERCAL, 12 byte

(1)DO(1)NEXT

Penjelasan:

NEXTadalah versi panggilan subrutin INTERCAL (atau, paling tidak, yang paling dekat yang bisa Anda dapatkan). Ini mendorong posisi saat ini ke NEXTtumpukan dan melompat ke label yang diberikan.

Namun, jika NEXTpanjang stack melebihi 80, Anda mendapatkan versi INTERCAL dari stack overflow:

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

Cobalah di Ideone. .


6
"TELAH KECEWA KE LAGO HITAM" apa ini, ArnoldC?
Addison Crump

5

Mornington Crescent, 139 133

Take Northern Line to Bank
Take Circle Line to Temple
Take Circle Line to Temple
Take Circle Line to Bank
Take Northern Line to Angel

4

Perakitan X86 (AT&T), 33 karakter

Perhatikan bahwa meskipun saya menggunakan label mainsebagai target lompatan, ini bukan fungsi rekursif.

.globl main
main:push $0;jmp main

Ide bagus: ini adalah semacam rekursi-tanpa-rekursi!
Andrea Corbellini

menggunakan a86: dd 0fdeb6010 karakter!
Skizz

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.