2011-11-18 42 views
0

,大家好,下面的代码将停止,因为运行时错误使用链接找到最大的阵列

#include<iostream> 
using namespace std; 
struct node 
{ 
    int item; 
    node *l; 
    node *r; 
    node(int x) 
    { 
    item=x; l=0;r=0; 
    } 
}; 

typedef node *link; 

link Max(int a[],int l,int n) 
{ 
    int m=l+(l+n)/2; 
    link x=new node(a[m]); 

    if(l==n) return x; 

    x->l=Max(a,l,m); 
    x->r=Max(a,m+1,n); 
    int u=x->l->item; 
    int v=x->r->item; 
    if(u>v) x->item=u; 
    else x->item=v; 

    return x;   
} 

int main(){ 
link y; 

int a[]={12,3,5,4,7,6,20,11,10,9}; 

int n=sizeof(a)/sizeof(a[0]); 
y=Max(a,0,n-1); 

cout<<y->item<<endl; 

return 0; 
} 

我不明白是什么原因,我宣布结构节点作为必要的工作,使用递归函数正确,我认为什么是另一个原因为什么它不工作?请给我一些建议,

+0

当您运行它时会发生什么? –

+0

它打开窗口并写入异常发生,运行时错误 –

+0

您是否尝试过在调试器中运行它? –

回答

2

代码给我一个堆栈溢出异常。你的变量m的计算结果是关闭的:它应该可能是类似于int m = l + (n-l)/2;这将给你从其他元素的一半的偏移量。您目前的实施给出的“中点”值超出范围[l,n],因此该函数无限期地递归