我在理解此代码的一部分时遇到了一些麻烦。我要谈论的部分是在term_min函数中,该函数在其自身内部调用,并用作minim函数的参数(返回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调用它,否则它将返回最大整数,该整数可以是您的操作系统。

实际上是这样做的,数组为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)))))))))))

关于c - 递归难度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23141507/

10-12 17:40