为什么递归在二进制搜索中找不到值时返回true

时间:2014-02-03 12:37:50

标签: c#

这是我的二进制搜索函数的代码找到了用户想要查找的值,但它总是返回false idk为什么,我去除了它并且它在找到数字后返回true但是当递归函数执行循环返回时将return语句更改为未找到xx请帮帮我

 public string BinarySearche(List<int> List2, int NumToFind)
    {
        List<int> List = List2;
        if (List.Count>2)
        {
            int Length = List.Count / 2;

            if (List[Length]==NumToFind)
            {
                return List[Length] + " Number found";
            }
            else if (List[Length]<NumToFind)
            {
                List2.RemoveRange(0, Length);
                BinarySearche(List2, NumToFind);
            }
            else if (List[Length]>NumToFind)
            {
                List2.RemoveRange(Length, List2.Count - Length);
                BinarySearche(List2, NumToFind);
            }
                return "Number not found";
        }
        else
        {
            if (List[0]==NumToFind)
            {
                return List[0] + " Number found";
            }
            else if(List[1] == NumToFind)
            {
                return List[1] + " Number found";                    
            }
                return "Number not found";
        }
    }

1 个答案:

答案 0 :(得分:0)

你在两个地方递归调用BinarySearche(List2,NumToFind),所以代码将进入,查找值(根据需要多次),当它找到它时,返回是正确的吗?所以它会将结果返回给它的父节点,因为一旦你从BinarySearche(List2,NumToFind)回来后,这个结果就会丢失,所以没有任何结果,所以真的就会丢失。

尝试打电话 “返回BinarySearche(List2,NumToFind);”这样,当你找到你想要的任何东西时,它会返回true,回到父级,得到真实并返回它直到找到根