给定大小为a
的整数数组n
,用原型
int f(int a[], int n);
找到数组的最小元素。
这是我设法提出的最佳选择:
int f(int a[], int n)
{
static int *min;
if (min == 0)
min = new int(a[n - 1]);
else if (*min > a[n - 1])
*min = a[n - 1];
if (n == 1)
return *min;
else
return f(a, n - 1);
}
它可以变得更好吗?我不喜欢使用静态变量。
答案 0 :(得分:17)
int f(int a[], int n)
{
if (n == 1)
return a[0];
n--;
return f(a + (a[0] > a[n]), n);
}
答案 1 :(得分:2)
int f(int a[], int n)
{
if(n == 1)
return a[0];
n--;
if(a[0] > a[n])
a[0] = a[n];
return f(a, n);
}
在任何给定时间,数组的最小元素存储在[0]中。我最初包含了一个非修改版本,但后来发现它是不尾递归。