`/* 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/