c++ - 使用尾递归查找数组的最小元素

标签 c++ algorithm

给定一个大小为n的整数数组a,编写一个带有原型(prototype)的尾递归函数

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

它能变得更好吗?我不喜欢使用静态变量。

最佳答案

int f(int a[], int n)
{
    if (n == 1)
        return a[0];
    n--;
    return f(a + (a[0] > a[n]), n);
}

关于c++ - 使用尾递归查找数组的最小元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13596455/

相关文章:

c++ - 自动需要的类(class)?

c++ - 此 C++ 代码给出了一个奇怪的警告

c - 用于散列 ip 片段的散列函数

c++ - 超过 1 个字符串文字时的 QSqlQuery ctor 或 prepare() 语法

c++ - 有没有更好的方法来命名管道 `cv::mat` 变量

python - swig:如何使 QList<T> 可迭代,如 std::vector

c++ - 解决二维数组中的迷宫

javascript - 每个簇选取 m 个点

Python find number 步骤将值分配给列表中的元素

algorithm - 如何确定算法函数的复杂度?