使用链接查找数组中的最大值

use link to find maximum in array

本文关键字:最大值 数组 查找 链接      更新时间:2023-10-16

伙计们,下面的代码因为运行时错误而停止工作

#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;
}

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

代码给了我一个堆栈溢出异常。你对变量m的计算是关闭的:它应该是类似于int m = l + (n-l)/2;的东西,它会给你剩余元素的一半与l的偏移量。您当前的实现给出了[l,n]范围之外的"中点"值,因此该函数无限期递归