4

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);
}

能好起来吗?我不喜欢使用静态变量。

4

2 回答 2

17
int f(int a[], int n)
{
    if (n == 1)
        return a[0];
    n--;
    return f(a + (a[0] > a[n]), n);
}
于 2012-11-28T01:53:20.023 回答
2

kmkaplan 的解决方案很棒,我支持他。这本来是我不那么棒的解决方案:

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);
}

在任何给定时间,数组的最小元素都存储在 a[0] 中。我最初包含了一个非修改版本,但后来我想到它不是尾递归的。

于 2012-11-28T02:22:50.650 回答