
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)程序就崩溃,而小于时却能找出答案。新手求教! 展开
#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)程序就崩溃,而小于时却能找出答案。新手求教! 展开
1个回答
展开全部
你的函数逻辑有问题。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.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询