Я пытаюсь написать функцию RECURSIVE, которая рандомизирует / перемешивает массив.
Написанная мною функция использует метод случайного преобразования Фишера-Йейтса, который отлично работает на небольших массивах, но выдает «Максимальная ошибка превышения стека вызовов» в моем предполагаемом массиве, содержащем 5000 элементов
Я задавался вопросом, может ли кто-нибудь помочь мне исправить этот метод так, чтобы он все еще работал рекурсивно на больших массивах?
Вот функция ниже:
shuffleArray = (array, currentIndex=0) => {
if (currentIndex >= array.length) {
return array;
}
let randomIndex = Math.floor(Math.random() * currentIndex);
let tempValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = tempValue;
let newIndex = currentIndex += 1;
return this.shuffleArray(array, newIndex);
}
console.log(shuffleArray([1, 2, 3, 4, 5, 6]));
// returns a random array like [3,4,6,1,2,5]
console.log(shuffleArray([...Array(5000).keys()]));
// an example array of 5000 elements returns error: Uncaught RangeError: Maximum call stack size exceeded