Я понимаю, что бинарный поиск был бы намного эффективнее, и у меня даже есть один работающий, но мне нужно написать рекурсивный линейный поиск для лаборатории. я продолжаю получать переполнение стека в методе linSearch()
, особенно в строке 33.
Мне нужно искать массивы размером до 1 280 000.
import java.util.Scanner;
public class linSearch {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.println("enter size");
int size = in.nextInt();
System.out.println("enter numb");
double numb = in.nextDouble();
double [] array = new double[size];
for(int i = 0; i < 30; i++){
for(int j = 0; j < size-1; j++){
double random = (int)(Math.random() * 1000000);
array[j] = (double)(random / 100);
}
int position = linSearch(array, numb, 0);
if(position == -1){
System.out.println("the term was not found");
}
else{
System.out.println("the term was found");
}
}
}
public static int linSearch(double[] array, double key, int counter){
if(counter == array.length){
return -1;
}
if(array[counter] == key){
return counter;
}
else{
counter += 1;
return linSearch(array, key, counter); //error occurs here
}
}
}
n
количества кадров в глубину он изменится на нерекурсивную версию в подходе «разделяй и властвуй» (у меня такое чувство, что @axblount действительно имел в виду это). Вы можете распараллелить только около2x + 1
задач (гдеx
— количество доступных процессоров), так что углубляйтесь или пока не будет 8 элементов для поиска. О, возможно, вам стоит немного разбить основной метод. - person Clockwork-Muse   schedule 30.03.2015