【发布时间】:2019-02-02 16:47:33
【问题描述】:
我正在尝试使用分治法找出 int 数组中最小数字的索引,但出现此堆栈溢出错误:
Exception in thread "main" java.lang.StackOverflowError
at java.lang.StrictMath.floor(Unknown Source)
at java.lang.Math.floor(Unknown Source)
这是我的分而治之方法:
private static int dC(int[] a, int f, int l) {
if(f == 1)
return f;
if(a[dC(a, f, (int)(Math.floor((double)(f+l)/2)))] > a[dC(a, (int)(Math.floor((double)(f+l)/2)+1), l)])
return dC(a, (int)(Math.floor((double)(f+l)/2)+1), l);
else
return dC(a, f, (int)(Math.floor((double)(f+l)/2)));
}
这是我在 main 方法中放入的内容:
int[] a = {35,30,40,50};
System.out.println(dC(a, 0, 3));
【问题讨论】:
-
只需检查二进制搜索的源代码,并以此为基础编写您自己的代码。
-
不相关的:使用有意义的名称。 a、f、l,它们都表示nothing。你写代码不是为了让编译器开心,你写代码是为了人类可以阅读和理解它。
-
整数除法 (7 / 2 == 3) 没有
floor和(double)演员更适合。 -
(int)(Math.floor((double)(f+l)/2))与(f+l)/2相同(假设f+l为非负数)。
标签: java arrays stack-overflow divide-and-conquer