当前位置: 代码迷 >> C语言 >> 用递归的方法写一个查找数组中最大值的算法
  详细解决方案

用递归的方法写一个查找数组中最大值的算法

热度:432   发布时间:2006-09-02 18:03:41.0
用递归的方法写一个查找数组中最大值的算法
如题有一数列a1,a2,a3……an用递归的方法输出数组中的最大值,我写了一个,不知对不对,麻烦大哥大姐给看一下,代码如下:
int maxnum(int *p,int i) //指针p指向数组,其中数组中存放数列a1……an
{ //变量i要传递数列的最大值n-1
int x=0;
if(i=-1)
return 0;
else
{
x=maxnum(*s,i-1);
if(*(s+i-1)>x) //如果数组中的数大于x的值,则赋值给x,保持x的值为
x=*(s+i-1); //最大
}
return x;
}






搜索更多相关的解决方案: 最大值  递归  算法  int  变量  

----------------解决方案--------------------------------------------------------
int maxnum(int *p,int i)
{
int x=0;
if(i==1)
return *p;
else
{
x=maxnum(p,i-1);
if(*(p+i-1)>x)
x=*(p+i-1);
}
return x;
}
对指针不熟悉,等号写成赋值号,哪来的指针s.....
----------------解决方案--------------------------------------------------------
以下是引用soft_wind在2006-9-2 18:14:37的发言:
int maxnum(int *p,int i)
{
int x=0;
if(i==1) //如果i==1,那么数组中下标为0的数能取到吗
return *p;
else
{
x=maxnum(p,i-1);
if(*(p+i-1)>x)
x=*(p+i-1);
}
return x;
}
对指针不熟悉,等号写成赋值号,哪来的指针s.....

按照我的,改正赋值号,指针p,能够正确吗?


----------------解决方案--------------------------------------------------------

按照你的代码,循环到最后一步,返回的数组元素不是数组为0的元素,应该改成i==0是不是呢?

[此贴子已经被作者于2006-9-2 18:44:57编辑过]


----------------解决方案--------------------------------------------------------
正不正确,您试下就知道了.
返回数组的元素当然有用了,它是递归的出口.
倒是那个return x;放在else 里面来得合适些.
刚才看完就直接改了,没仔细再推敲
----------------解决方案--------------------------------------------------------

饿,您怎么又改了帖子?
当然是1了,给您个例子,相信您马上会明白了:
int main(void)
{
int a[2]={90,600};
printf("%d",maxnum(a,2));
getch();
return 0;
}
用这个程序去想想为什么是1而不是0


----------------解决方案--------------------------------------------------------
int maxnum(int *p,int i)
{
int x=0;
if(i==1) //如果i==1,那么数组中下标为0的数能取到吗
return *p;
else
{
x=maxnum(p,i-1);
if(*(p+i-1)>x)
x=*(p+i-1);
}
return x;
}



----------------解决方案--------------------------------------------------------
您再想想吧,用6楼的再想想,我有事要先出去10分钟
----------------解决方案--------------------------------------------------------
我明白了,返回的*p就是数组中0号元素,谢谢斑主,真的很感谢
----------------解决方案--------------------------------------------------------
//如果坚持要i==0的话 则一下两处要更改
int maxnum(int *p,int i)
{
int x=0;
if(i==0)
return *p;
else
{
x=maxnum(p,i-1);
if(*(p+i-1)>x)//(1)改为if(*(p+i)>x)
x=*(p+i-1);//(2)x=*(p+i);//
}
return x;
}

若数组a有两个元素则在函数调用时要改为maxnum(a,1);
----------------解决方案--------------------------------------------------------
  相关解决方案