关于java 递归 返回值 的疑惑!!!...!!! 求高手解疑惑....
本帖最后由 buena00 于 2012-12-06 02:30:40 编辑
package com.test1;
public class Test3
{
public static void main(String[] args)
{
int arr[] = { 2, 5, 7, 12, 25 };
BinaryFind bf = new BinaryFind();
System.out.println("找到不明白下标:" + bf.find(0, arr.length, 25, arr));
}
}
class BinaryFind
{
public int find(int leftIndex, int rightIndex, int val, int arr[])
{
int midIndex = (rightIndex + leftIndex) / 2;
int midVal = arr[midIndex];
if (leftIndex > rightIndex)
{
return 0;
}
if (midVal > val)
{
find(leftIndex, midIndex - 1, val, arr);
}
else if (midVal < val)
{
find(midIndex + 1, rightIndex, val, arr);
}
else if (midVal == val)
{
System.out.println("找到正确下标:" + midIndex);
}
System.out.println("执行到这儿了吗?");
return midIndex;
}
}
控制台输出结果是:
//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
找到正确下标:4
执行到这儿了吗?
执行到这儿了吗?
找到不明白下标:2
//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
为什么不应该是
找到正确下标:4
执行到这儿了吗?
找到不明白下标:4
为什么会输出2次"执行到这儿了吗?"
"找到不明白下标:2" 为什么是2 不是4 呢?
请高手解下疑惑... 郁闷一晚上了...!!! >. <
------解决方案--------------------LZ,纠结了我老半天,终于给弄明白了。。
由于你下于的时候,重新调用了下自己的find,最后输出了
找到正确下标:4
执行到这儿了吗?,,
可最初的bf.find(0, arr.length, 25, arr)这个,也必须是要返回的,然后是最原始的输出。
System.out.println("执行到这儿了吗?");
这个时候 midIndex=2.。
------解决方案--------------------修改了一下,楼主参考:
public class Test3
{
public static void main(String[] args)
{
int arr[] = { 2, 5, 7, 12, 25};
BinaryFind bf = new BinaryFind();
int result=bf.find(0, arr.length, 25, arr);