Это рекурсивная реализация Shuffle Fisher-Yates. Почему это вызывает ошибку StackOverflow, когда я даю ей всего лишь 10000 элементов?Рекурсивный Shuffle Algo бросает ошибку StackOverflow
public static void main(String[] args)
{
int[] array = algo3(10000);
}
public static int[] algo3(int n)
{
int[] a = new int[n];
for (int i = 0; i < a.length ; i++)
a[i] = i;
algo3(a, 0);
return a;
}
public static void algo3(int[] a, int pos)
{
if (pos == a.length - 1)
return;
int tmp = a[pos];
int rand = randInt(pos,a.length); // line #27
a[pos] = a[rand];
a[rand] = tmp;
algo3(a,pos + 1); // line #30
}
private static int randInt(int i, int j)
{
return (int) (Math.random() * (j - i)) + i; // line #35
}
StackTrace:
Exception in thread "main" java.lang.StackOverflowError
at java.util.concurrent.atomic.AtomicLong.compareAndSet(Unknown Source)
at java.util.Random.next(Unknown Source)
at java.util.Random.nextDouble(Unknown Source)
at java.lang.Math.random(Unknown Source)
at nl.saxion.Week1.randInt(Week1.java:35)
at nl.saxion.Week1.algo3(Week1.java:27)
at nl.saxion.Week1.algo3(Week1.java:30)
Ну, вы можете * настроить размер стека, но все, что действительно нужно сделать, - это поднять потолок немного выше, а не полностью снять потолок. –