这样的递归有什么问题吗?

sailor11 2004-10-10 10:19:59
这样的递归有什么问题吗?
private LinkNode mergeSortHelp(LinkNode head)//归并排序
{
LinkNode otherFirst;
if(head!=null)
{
if(head.next!=null)
{

otherFirst=split(head);
head=mergeSortHelp(head);
otherFirst=mergeSortHelp(otherFirst);
head=mergeNode(head,otherFirst);
}
}
return head;
}
其中spilt()和mergeNode()的定义如下:
private LinkNode split(LinkNode head)//拆分
{
LinkNode current;

if(head==null) return null;
if(head.next==null) return head;
if(head.next.next==null) return head.next;

current=head.next;
while(current!=null)
{
head=head.next;
current=current.next;
if(current!=null)
current=current.next;
}
return head;
}


private LinkNode mergeNode(LinkNode node1,LinkNode node2)//合并有序子表
{
int node1L=getNodeNextCount(node1);
int node2L=getNodeNextCount(node2);

int i=0;
int j=0;

LinkNode current=new LinkNode();
LinkNode result=current;

while((i<node1L)&&(j<node2L))
{

if(((Comparable)node1.getData()).compareTo((Comparable)node2.getData())<0){

current.next=node1;
node1=node1.next;
current=current.next;
i++;}
else{

current.next=node2;
node2=node2.next;
current=current.next;
j++;}



}
if(i==node1L)
{
while(node2!=null)
{
current.next=node2;
node2=node2.next;
current=current.next;
}
}
if(j==node2L)
{
while(node1!=null)
{
current.next=node1;
node1=node1.next;
current=current.next;
}
}
result=result.next;

return result;
}
但运行后,抛出StackOverflowError,怎么回事啊
...全文
37 点赞 收藏 2
写回复
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
power17 2004-10-10
除非没办法,否则不用递归,运行慢
回复
zhang21cnboy 2004-10-10
递归太多了。
回复
发动态
发帖子
Web 开发
创建于2007-09-28

7.9w+

社区成员

Java Web 开发
申请成为版主
社区公告
暂无公告