C语言数组递归问题(形参接收数组和其大小)

#include<stdio.h>#include<stdlib.h>intmin(inta,intb){intmin;if(a>b)min=b;elsemin=a;re... #include <stdio.h>
#include <stdlib.h>

int min(int a,int b)
{
int min;
if(a>b)
min=b;
else
min=a;
return min;
}

int arboat(int a[],int length)
{
int i;
static int n=0;
if(length==1)
return a[0];
else
{
if(length==2)
return min(a[0],a[1]);
else
{
int b[length-n];
for(i=0;i<length-n;i++)
{
b[i]=a[i];
}

n+=1;
return min(b[length-n-1],arboat(b,length-n-1));
}
}
}

int main()
{
int j,length;
int a[1000];
printf("请输入一个数组(大小互不相同)以-1结束:\n");
for(j=0;;j++)
{
scanf("%d",&a[j]);
if(a[j]==-1)
break;
}
length=j;
int c[length];
for(j=0;j<length;j++)
{
c[j]=a[j];
}
printf("数组的最小值为:%d\n",arboat(c,length));

system("PAUSE");
return 0;
}
为何我输如数组大小超过一定(测试出来为4)程序就崩溃,而小于时却能找出答案。新手求教!
展开
 我来答
jonahkingkkkk
2013-11-26 · TA获得超过466个赞
知道小有建树答主
回答量:190
采纳率:50%
帮助的人:163万
展开全部
你的函数逻辑有问题。return min(b[length-n-1],arboat(b,length-n-1));这句话并不能保证所有数都被判断到。你输入四个数的话,最后一个数不管多大都不会被判断到。只判断前3个。输入超过4的话。有情况是length会等于0.所以逻辑有问题。
更多追问追答
追问
感觉可以啊,上来就返回了(b[3],arboat(b,3));为什么会判断不到b[3]这最后一个数
追答
如果你输入4个数。length=4,min(b[length-n-1],arboat(b,length-n-1));

length-n-1=4-1-1=2.怎么会等于4.
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式