首页 新闻 会员 周边

寻找某两整数和为某整数中的递归问题

0
悬赏园豆:5 [已解决问题] 解决于 2014-12-17 18:41
static void Main(string[] args)
        {
            List<int> array = new List<int>{3,5,7,6,2,1};
            foreach (int a in array)
                Console.Write("{0}  ", a);
            int x = 5;
            Console.WriteLine();
            Console.WriteLine(x);
            bool b = Find_Sum(array, x);
            if (b)
                Console.WriteLine("find !");
            else
                Console.WriteLine("Cannot find!");
            Console.ReadKey();
        }


static bool Merge_Sum(List<int> array,int p,int r,int x)
        {
            int q;
            if(p<r)
            {
                q = (p + r) / 2;
                Merge_Sum(array, p, q, x);
                Merge_Sum(array, q + 1, r, x);
                bool b=Merge_Add(array, p, q, r, x);
                if (b)
                    return true;
            }
            return false;
        }

static bool Merge_Add(List<int> array,int p,int q,int r,int x)
        {
            for (int i = p; i <= q; i++)
                for (int j = q + 1; j <= r; j++)
                {
                    if (array[i] + array[j] == x)
                        return true;
                }
            return false;
        }

注: 代码功能,查找一个集合S中是否存在两个数之和等于x

有个疑问就是: 如果利用调试逐步进行的话,会发现return true之后又会有return false。 为什么递归完成后最后的结果中返回后为  b=true。    即使最后一次迭代返回的是false~  。

可能是我理解有问题,但还是没想通原因~求解答,thanks!!!

此外,再弱弱的问句,这个算法的时间复杂度是θ(nlogn)吗~   暂且不说这段代码写的有多臭

11111111111111的主页 11111111111111 | 初学一级 | 园豆:199
提问于:2014-12-16 23:40
< >
分享
最佳答案
0

因为return了之后就直接跳出去了,不会再执行下面的语句了呀

收获园豆:5
leaves0529 | 菜鸟二级 |园豆:215 | 2014-12-17 12:18

谢谢~是代码功能本身就是错的,从而导致自己理解出错。谢谢回答

11111111111111 | 园豆:199 (初学一级) | 2014-12-17 12:59

@ice_chen: 恩。。我也看着是函数名好像错了,可以的话加下关注,有什么问题互相讨论!

leaves0529 | 园豆:215 (菜鸟二级) | 2014-12-17 13:11
其他回答(1)
0

首先,很抱歉,太大意了在上面添加的代码原本就是错的

static void Main(string[] args)
        {
    List<int> array = new List<int>{3,1,3,4,4,2};
            foreach (int a in array)
                Console.Write("{0}  ", a);
            int x = 6;
            Console.WriteLine();
            Console.WriteLine(x);
            bool b = Merge_Sum(array,0,5,x);
            if (b)
                Console.WriteLine("find !");
            else
                Console.WriteLine("Cannot find!");
            Console.ReadKey();
}

重新试了下,写的代码本身就不能实现功能。而不关乎return的问题。  

 感谢浏览过,思考过的亲们。

感谢大家。!

11111111111111 | 园豆:199 (初学一级) | 2014-12-17 12:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册