首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

关于java 递归 返回值 的困惑! 求高手解疑惑.

2012-12-25 
关于java 递归 返回值 的疑惑!!!...!!! 求高手解疑惑....本帖最后由 buena00 于 2012-12-06 02:30:40 编辑

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


String end=result>0 ? " 找到目标 下标是: " +result: "没有找到目标!!!"; 
System.out.println(end);
}
}

class BinaryFind
{
static int result=0;//保存返回结果
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("执行到这儿了吗?");//输出放在这里就不会输出多个.(找到时输出一次,找不到一次不执行).
result=midIndex;//找到下标赋给result.
}
return result;
}
}

热点排行