Doğru cevap, bu fonksiyonun tüm tamsayılar için sonlandırılmamasıdır (özellikle -1'de sonlanmaz). Arkadaşınız bunun sahte kod olduğunu ve sahte kodun yığın taşmasıyla sonlanmadığını belirtmekte haklıdır. Sahte kod resmi olarak tanımlanmamıştır, ancak fikir teneke üzerinde söylenenleri yapmasıdır. Kod "yığın taşması hatasıyla sonlandır" demezse yığın taşması hatası olmaz.
Bu gerçek bir programlama dili olsa bile, yığının kullanımı dil tanımının bir parçası olmadığı sürece, doğru cevap yine de "sonlanmaz" olacaktır. Çoğu dil, yığının taşmasına neden olabilecek programların davranışını belirtmez, çünkü bir programın ne kadar yığının kullanılacağını tam olarak bilmek zordur.
Kodu gerçek bir yorumlayıcı veya derleyici üzerinde çalıştırmak, birçok dilde yığın taşmasına neden oluyorsa, bu, dilin biçimsel anlamıyla uygulama arasında bir tutarsızlıktır. Genelde, bir dil uygulamasının yalnızca sınırlı belleğe sahip beton bir bilgisayarda yapılabilecekleri yaptığı anlaşılmaktadır. Program yığın taşmasıyla ölürse, daha büyük bir bilgisayar satın almanız, gerekirse tüm bu belleği desteklemek için sistemi yeniden derlemeniz ve tekrar denemeniz gerekir. Program sonlandırılmıyorsa, bunu sonsuza kadar yapmaya devam etmeniz gerekebilir.
Kuyruk çağrısı optimizasyonu ve notlama gibi bazı optimizasyonlar , sabit bağlı yığın alanında sonsuz sayıda işlev çağrısı zincirine izin verebileceğinden , bir programın yığının taşmasına veya taşmamasına rağmen iyi tanımlanmamıştır . Bazı dil belirtimleri, uygulamaların mümkün olduğunda kuyruk çağrısı optimizasyonu yapmasını zorunlu kılar (bu fonksiyonel programlama dillerinde yaygındır). Bu işlev f(-1)
için f(f(-2))
; dış çağrı f
bir kuyruk çağrısıdır, böylece yığının üzerinde hiçbir şey itmez, bu nedenle sadece f(-2)
yığına gider ve bu geri döner -1
, böylece yığın başlangıçta olduğu duruma geri döner . Böylece kuyruk çağrı optimizasyonu f(-1)
ile sürekli bellekte sonsuza kadar döngüler.