`/* 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的同类问题。您能给我解释一下这段代码的工作方式吗?或者这是一个好的编码。我以学习递归为己任,并且有效,请解释。

最佳答案

您的代码中有两个问题:


终止发生得太晚了:当a[x]时,您返回x==n-那是末尾的一个元素。
a[x] > minima为false时,缺少返回值:函数结束而不返回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];


请注意,您可以保存一个参数,方法是在数组的末尾开始搜索,然后向后搜索直到索引为零。

关于c - 递归如何查找数组的最小值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18418680/

10-17 01:51