Использование стека не зависит от размера вашей программы или количества строк в ней, оно зависит от поведения вашей программы во время выполнения, в основном из-за циклической рекурсии. Например, эта небольшая функция будет использовать стек любого размера:
let rec f () = f () + f ()
На изображении, которое вы предоставили, я вижу по крайней мере один случай несвязанной рекурсии (то есть рекурсия, которая определенно не прекратится). Когда вы звоните insert
, вы применяете его ко всему дереву m
вместо поддерева. Таким образом, при каждом новом вызове ничего не меняется, и вы получаете бесконечный цикл.