我在理解此代码的一部分时遇到了一些麻烦。我所讨论的部分是在函数term_min中,函数在其自己的体内被调用,并用作函数minim的参数(return minim(array [arraySize],term_min(arraySize - 1)); )。 有人能解释一下这实际上是做什么的吗?这是整个代码:
#include <stdio.h>
#include <limits.h>
/* The program computes the minimum of a array of integer numbers*/
#define NMAX 100
#define MAXIMUM INT_MAX
int array[NMAX];
int minim(int x, int y)
{
if (x <= y) return x;
else return y;
}
int term_min(int arraySize)
{
if (arraySize >= 0) return minim(array[arraySize], term_min(arraySize - 1)); //here's where I have trouble understanding
else return MAXIMUM;
}
int main(void)
{
int i, n;
printf("\nInput the number of the elements of the array n=");
scanf("%d",&n);
printf("\nInput the values of the elements\n");
for (i=0; i<n; ++i)
{
printf("array[%d]=", i);
scanf("%d", &array[i]);
}
printf("\nInput array is:\n");
for (i=0; i<n; ++i)
{
printf("%d\t", array[i]);
if ((i+1) % 10 == 0) printf("\n");
}
printf("\nThe minimum is %d\n", term_min(n-1));
printf("\nPress a key!");
return 0;
}
答案 0 :(得分:0)
如果您使用的是Linux,则可以使用strace
。如果您使用的是IDE,则可以使用调试器。或者,您可以在term_min
电话中添加一些printf。函数minim
返回两个值(x或y)中较小的一个。最后,main(void)
应为main(int argc, char *argv[])
。
答案 1 :(得分:0)
这是计算数组最小值的一种愚蠢方式,但实际上它正在做的是计算所有数字,除非你用0调用它,它返回一个int可以为你的最大数字OS。
基本上这样做,对于一个10的数组:
minim( array[9], minim( array[8], minim( array[7], minim( array[6], minim( array[5], minim( array[4], minim( array[3], minim( array[2], minim( array[1], minim( array[0], INT_MAX)))))))))))
答案 2 :(得分:0)
term_min
非常简单:除非arraySize
为否定,否则会使用数组的最后一个元素调用minim
(使用误导性命名的arraySize
)并且该数组前面元素的最小值。碰巧它计算该数组子集的最小值的方法是使用该函数的另一个实例。
答案 3 :(得分:0)
你可以这样理解:
对于函数int term_min(int arraySize)
,arraySize is >= 0
这么久,继续运行递归,直到达到目标。 (您的目标是获得最小数组值)
if (arraySize >= 0) return minim(array[arraySize], term_min(arraySize - 1));
表示:
return minim(array[arraySize], term_min(arraySize - 1));
表示:
获取最后和倒数第二数组元素,并通过调用minim()
来比较较小的元素,然后返回较小元素的值。< / p>
每次执行此操作时,都会减少arraySize。此过程一直持续到arraySize达到-1(根据您的代码)
当发生这种情况时,您会找到最小的数组值(如果存在)。