При длине 4 ваш массив результатов имеет только несколько возможных результатов (см. Ниже).
Проблема с вашей функцией заключается в том, что если вы начнете с di git (s), который не даст никакого возможного ответа, он будет работать вечно, и только с 4 возможными числами вероятность этого очень велика. высокая. Если в качестве первого числа возвращается 0 или 3, решение никогда не будет найдено. То же самое, если возвращается 1, а второе число не равно 3, или если 2 является первым, а второе число не равно 0, и т.д.
Вы также будете работать вечно, потому что ваше время l oop должно использовать indexes.length < length
вместо <=
[0, 1, 2, 3] // no
[0, 1, 3, 2] // no
[0, 2, 1, 3] // yes
[0, 2, 3, 1] // no
[0, 3, 1, 2] // no
[0, 3, 2, 1] // yes
[1, 0, 2, 3] // no
[1, 0, 3, 2] // yes
[1, 2, 3, 0] // no
[1, 2, 0, 3] // no
[1, 3, 0, 2] // yes
[1, 3, 2, 0] // yes
[2, 0, 1, 3] // no
[2, 0, 3, 1] // yes
[2, 1, 0, 3] // yes
[2, 1, 3, 0] // yes
[2, 3, 0, 1] // no
[2, 3, 1, 0] // no
[3, 0, 1, 2] // no
[3, 0, 2, 1] // yes
[3, 1, 0, 2] // yes
[3, 1, 2, 0] // no
[3, 2, 0, 1] // no
[3, 2, 1, 0] // yes
Это говорит нам о том, что этот алгоритм вероятен потерпеть неудачу, потому что не имеет обработки условия "сбой", когда не осталось чисел, которые могут удовлетворить условиям Вы могли бы проверить это и перезапустить, если это так, но, скорее всего, все будет медленно. Другой подход был бы лучше.