Jawaban yang benar adalah bahwa fungsi ini tidak berakhir untuk semua bilangan bulat (khususnya, ini tidak berakhir pada -1). Teman Anda benar dalam menyatakan bahwa ini adalah pseudocode dan pseudocode tidak berakhir pada stack overflow. Pseudocode tidak didefinisikan secara formal, tetapi idenya adalah bahwa ia melakukan apa yang dikatakan pada kaleng. Jika kode tidak mengatakan "berakhir dengan kesalahan stack overflow" maka tidak ada kesalahan stack overflow.
Bahkan jika ini adalah bahasa pemrograman nyata, jawaban yang benar masih akan "tidak berakhir", kecuali penggunaan tumpukan adalah bagian dari definisi bahasa. Sebagian besar bahasa tidak menentukan perilaku program yang mungkin menumpuk stack, karena sulit untuk mengetahui dengan tepat berapa banyak tumpukan program yang akan digunakan.
Jika menjalankan kode pada juru bahasa atau kompiler yang sebenarnya menyebabkan stack overflow, dalam banyak bahasa, itu adalah perbedaan antara semantik formal bahasa dan implementasi. Secara umum dipahami bahwa implementasi suatu bahasa hanya akan melakukan apa yang dapat dilakukan pada komputer beton dengan memori yang terbatas. Jika program mati dengan stack overflow, Anda seharusnya membeli komputer yang lebih besar, mengkompilasi ulang sistem jika perlu untuk mendukung semua memori itu, dan coba lagi. Jika program ini tidak berakhir maka Anda mungkin harus terus melakukan ini selamanya.
Bahkan fakta bahwa suatu program akan atau tidak akan meluap stack tidak terdefinisi dengan baik, karena beberapa optimasi seperti optimasi panggilan ekor dan memoisasi dapat memungkinkan rantai panggilan fungsi tak terbatas dalam ruang stack terikat-konstan. Beberapa spesifikasi bahasa bahkan mengamanatkan bahwa implementasi melakukan optimasi panggilan ekor bila memungkinkan (ini umum dalam bahasa pemrograman fungsional). Untuk fungsi ini, f(-1)
perluas untuk f(f(-2))
; panggilan luar ke f
adalah panggilan ekor sehingga tidak mendorong apa pun di tumpukan, sehingga hanya f(-2)
masuk ke tumpukan, dan itu kembali -1
, sehingga tumpukan kembali ke keadaan yang sama seperti di awal. Jadi dengan f(-1)
pengulangan ekor panggilan optimasi selamanya dalam memori konstan.