-1
`/* 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 也发现了同样的问题。你能解释一下这段代码是如何工作的吗?或者这是一个很好的编码。我自己学习递归并且它正在工作。请解释一下。

4

1 回答 1

1

您的代码中有两个问题:

  • 终止发生得太晚了:你返回a[x]x==n- 那是结束后的一个元素。
  • 为 false时缺少 return 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];

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

于 2013-08-24T12:48:25.317 回答