我试图使用递归函数在数组中找到最小数。但是我的代码给出了segemtation错误。
main()
{
int a[5]={2,1,4,5,3};
int n=1;
fumi(a,n,a[0],5);
}
fumi(int a[],int n,int min,int t)
{
if(n==t)
{
printf("%d",min);
}
if(a[n]<min)
{
min=a[n];
}
return(fumi(a,n+1,min,t));
}
哪里出错,而且主要不归还任何东西都不是分割错误的原因。
答案 0 :(得分:4)
在[{1}}之后你也应该return
,否则,你检查printf("%d",min);
,并且if (a[t] < min)
没有被分配。
a[t]
答案 1 :(得分:2)
您的代码非常接近工作。它崩溃的原因是因为递归永远不会停止并且继续部署在数组的末尾。
您正确检查n == t
并打印出结果,但之后您不会返回。代码一直运行到无穷大。只需在printf
解决问题后添加退货:
void fumi(int a[],int n,int min,int t)
{
if(n==t)
{
printf("%d",min);
return; // stop recursing
}
if(a[n]<min)
{
min=a[n];
}
fumi(a,n+1,min,t);
}
答案 2 :(得分:2)
执行
后if(n==t)
{
printf("%d",min);
}
它没有返回,而是继续做:
if(a[n]<min)
{
min=a[n];
}
所以当基本条件满足时它不会返回。因此,fumi
函数总是以递归方式调用。
段错误的两个原因:
n
超出最大数组长度时,未分配(非法)内存访问会触发它以先发生者为准。
因此,代码所需的更正是在遇到基本条件时返回:
if(n==t)
{
printf("%d",min);
return;
}