递归难度

时间:2014-04-17 19:09:39

标签: c recursion

我在理解此代码的一部分时遇到了一些麻烦。我所讨论的部分是在函数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;
}

4 个答案:

答案 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));表示:

  • 这么长的arraySize&gt; = 0,继续运行递归

return minim(array[arraySize], term_min(arraySize - 1));表示:

  • 获取最后倒数第二数组元素,并通过调用minim()来比较较小的元素,然后返回较小元素的值。< / p>

  • 每次执行此操作时,都会减少arraySize。此过程一直持续到arraySize达到-1(根据您的代码)

  • 当发生这种情况时,您会找到最小的数组值(如果存在)。