Я написал программируемый пользователем калькулятор и теперь сталкиваюсь со следующей проблемой.
Допустим, пользователь пишет в нем следующее:
fun(n) = fun(n-1)
, а затем пытается позвонить fun(42)
(или любой другой номер). Теперь очевидно, что код пользователя вызовет бесконечную рекурсию, что, в свою очередь, приведет к краху всего калькулятора с переполнением стека.
Как я могу заставить калькулятор корректно выйти из расчета?
Я смотрел на то, как Mathematica справляется с подобными ситуациями, и он просто спасается, сказав
$IterationLimit::itlim: Iteration limit of 4096 exceeded.
Я попробовал подобный подход, но затем, поскольку размер стека зависит от ОС, как узнать, какое число использовать в качестве предела итерации (да, я нашел число, которое «кажется, работает» экспериментально но это не правильно)?
Спасибо за ваше время. Ядро калькулятора написано на C.