运行 递归线性搜索时出现堆栈溢出错误
Getting stack overflow error when running recursive linear search
我意识到二分搜索会更有效,我什至有一个工作,但我需要为实验室编写递归线性搜索。
我一直在方法 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
}
}
}
如果您的堆栈可以容纳 15000 次对自身的交互调用,那您就很幸运了,更不用说 128,000 次了
但是,如果您已验证递归已正确实现,则可以增加堆栈的大小,以允许更多的调用。根据安装的 Java 虚拟机 (JVM),默认线程堆栈大小可能等于 512KB 或 1MB。
但是您可以使用 -Xss 标志增加线程堆栈大小。可以通过项目配置或命令行指定此标志。
希望对您有所帮助
我意识到二分搜索会更有效,我什至有一个工作,但我需要为实验室编写递归线性搜索。
我一直在方法 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
}
}
}
如果您的堆栈可以容纳 15000 次对自身的交互调用,那您就很幸运了,更不用说 128,000 次了 但是,如果您已验证递归已正确实现,则可以增加堆栈的大小,以允许更多的调用。根据安装的 Java 虚拟机 (JVM),默认线程堆栈大小可能等于 512KB 或 1MB。
但是您可以使用 -Xss 标志增加线程堆栈大小。可以通过项目配置或命令行指定此标志。
希望对您有所帮助