递归如何查找数组的最小值

时间:2013-08-24 12:42:04

标签: c algorithm recursion

`/* finding the minimum number of a array */
#include<stdio.h>

int minimum(int n, int a[n], int x);

int main(void)
{

  int a[5] = { 5, 4, 3, 4, 5 };
  printf("%d \n", minimum(4, a, 0));
  return 0;
}

int minimum(int n, int a[n], int x)
{
  int minima;
  if (x >= n)
    return a[x];
  else
    minima = minimum(n, a, x + 1);
  if (a[x] > minima)
    return minima;
}
`

嘿,我在stackoverflaw中读了几个递归源。使用JAVA也发现了同样的问题。能否请您解释一下这段代码的工作原理。这是一个很好的编码。我自己去学习递归,它正在发挥作用。请解释一下。

1 个答案:

答案 0 :(得分:1)

您的代码中存在两个问题:

  • 终止发生得太晚了:在a[x]时返回x==n - 这是结束时的一个元素。
  • a[x] > minima为假时,返回时遗漏:您的函数在不返回a[x]的情况下结束。

要解决这两个问题,请更改终止条件的检查,并添加缺少的返回:

if(x >= n-1) return a[n-1];
// You do not need an else after a return
minima = minimum(n,a,x+1);
if (a[x] > minima) return minima;
return a[x];

请注意,您可以通过在数组末尾开始搜索并向后移动直到达到索引零来保存一个参数。