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)吗~ 暂且不说这段代码写的有多臭
因为return了之后就直接跳出去了,不会再执行下面的语句了呀
谢谢~是代码功能本身就是错的,从而导致自己理解出错。谢谢回答
@ice_chen: 恩。。我也看着是函数名好像错了,可以的话加下关注,有什么问题互相讨论!
首先,很抱歉,太大意了在上面添加的代码原本就是错的
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的问题。
感谢浏览过,思考过的亲们。
感谢大家。!