То, что происходит, - это бесконечная рекурсия. Это приводит к переполнению стека, поскольку адрес возврата функции и аргументы функции занимают место в стеке.
Проблема возникает из-за l oop: ко времени третьего уровня рекурсии (тот, который добавляет 3) возвращается, он удалил 2 и 3 из среза. Таким образом, предыдущий уровень, который должен завершить свою вторую итерацию, увидит, что 3 отсутствует, поэтому он снова вызовет backtrack
, но тот увидит, что 3 отсутствует, но когда он вернется, 2 и 3 отсутствуют , поэтому он будет вызывать backtrack
рекурсивно еще два раза, и так далее, и так далее.