请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

我在编递归的时候出现的StackOverflowError的错误提示,不过我编的没什么问题啊

我在编递归的时候出现的StackOverflowError的错误提示,不过我编的没什么问题啊https://img1.sycdn.imooc.com//szimg/5b5c454a00012c1a09390239.jpg

正在回答

1回答

liuyubobobo 2018-07-29 09:22:57

这个课程的所有代码都可以在官方Github上找到,试一下在你的环境中运行课程的官方代码,看是否有同样的问题?如果没有问题,仔细比对一下,看看你的代码哪里有问题?

课程官方代码github传送门:https://github.com/liuyubobobo/Play-with-Algorithms 


另外,可以尝试一下先使用小样本量,看是否有问题?对于课程中的递归,在merge的过程中,如果aux数组使用静态空间分配的话,对于比较大的数据规模,会由于空间不足导致栈溢出。最简单的解决方案是在merge过程中使用new方法开辟aux的空间。具体可以参考课程官方代码的注释(16行)。传送门:https://github.com/liuyubobobo/Play-with-Algorithms/blob/master/03-Sorting-Advance/Course%20Code%20(C%2B%2B)/02-Merge-Sort/main.cpp

注意,对于C++语言,如果使用new开辟内存,不要忘记delete(参考39行)


最后,对于mergeSort,有一个优化,不需每次在merge过程中开辟申请aux的空间,而可以在mergeSort中只开辟一次aux空间,以参数的形式传给merge重复使用。对于这个优化,课程给出了补充的参考代码,可以参考:https://github.com/liuyubobobo/Play-with-Algorithms/blob/master/03-Sorting-Advance/Course%20Code%20(C%2B%2B)/Optional-01-MergeSort-Create-aux-Array-Out-of-Merge/MergeSort2.h


加油!

2 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信