我在网上进行了大量搜索,但我发现的所有解决方案都使用两个参数来跟踪所用区域的大小。如果我被允许这样做会很容易,但我不是。如下所示,代码缺少一个停止值,因为我不知道如何保留原始信息。
这是维基百科上的代码,您可以看到他们使用imin和imax作为跟踪变量:http://en.wikipedia.org/wiki/Binary_search_algorithm#Recursive
我的(非常不正确)代码如下。 mid
变量没有任何意义,因为如果我不允许在函数中有任何额外的参数,我不知道如何正确设置低和高。
public static int findRecursiveB( String s, char c)
{
int low = 0;
int high = s.length()-1;
int mid = (low+high)/2;
if (s.charAt(mid) < c) {
return findRecursiveB(s.substring(low, mid), c);
}
else if (s.charAt(mid) >= c) {
return findRecursiveB(s.substring(mid+1, high), c);
}
else return mid;
}
答案 0 :(得分:0)
这里的一个关键点是原String s
包含什么?为此,它必须是一个排序的String,这意味着String中的字符必须是有序的。具体来说,看起来您编写的代码希望s
按相反的顺序排序。否则,除非我完全遗漏了某些东西,否则你的代码完全符合它的要求:不需要传递额外的参数,因为你在每次递归调用时传入子字符串。
否则,干得好。