com*_*crk 2 c arrays recursion min
我编写了以下程序,以使用递归从数组中查找最小值元素.然而,该程序继续向我显示答案为1000
#include<stdio.h>
#define MAX 100
int getminElement(int []);
int size;
int main(){
int min;
int i;
int a[10]={12,6,-24,78,43,3,22,45,40};
min=getminElement(a);
printf("Smallest element of an array is: %d",min);
return 0;
}
int getminElement(int a[]){
static int i=0,min =1000;
if(i < size){
if(min > a[i])
min=a[i];
i++;
getminElement(a);
}
return min;
}
Run Code Online (Sandbox Code Playgroud)
您没有设置size
变量.由于size
是一个全局变量,它会自动初始化为0
.
所以当第一次达到这个条件时
if(i < size)
Run Code Online (Sandbox Code Playgroud)
失败,并返回min
,这是1000
请执行下列操作
int max;
int i;
int a[10]={12,6,-24,78,43,3,22,45,40};
size = 10;
Run Code Online (Sandbox Code Playgroud)
或者,让它变得更好.
int max;
int i;
int a[10]={12,6,-24,78,43,3,22,45,40};
size = sizeof(a)/sizeof(int);
Run Code Online (Sandbox Code Playgroud)
正如评论中所讨论的,代码中还有另一个错误.您忽略if
块内函数调用的返回值.
您应该使用它将值返回给调用函数.就像是,
if(i < size)
{
if(min > a[i])
min=a[i];
i++;
return getminElement(a);
}
Run Code Online (Sandbox Code Playgroud)
正如一些人所指出的,你的代码有点令人困惑,所以我会发布一个更简单的代码,没有static
和global
变量.试着理解它,如果你觉得困难就发表评论.
#include<stdio.h>
#define MAX 100
int getminElement(int [], int, int);
int main()
{
int min;
int i;
int a[10]={12,6,-24,78,43,3,22,45,-40};
printf("Smallest element of an array is: %d", getminElement(a, 0, sizeof(a)/sizeof(int)));
return 0;
}
int getminElement(int a[], int index, int size)
{
int min = 9999;
if(index < size)
min = getminElement(a, index + 1, size);
if(a[index] < min)
return a[index];
else
return min;
}
Run Code Online (Sandbox Code Playgroud)