日期:2014-05-20  浏览次数:20693 次

关于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);