【问题标题】:Recursive Function to find Max value between 2 integers递归函数查找2个整数之间的最大值
【发布时间】:2019-12-04 05:28:05
【问题描述】:

我正在尝试创建一个递归函数,该函数在数组中的低整数和高整数之间找到最大数。

我已经尝试过这个函数,它可以帮助递归地找到数组中的最大元素。我只是在如何添加到接受低整数和高整数的函数来找到这两个之间的最大值时遇到了麻烦。

int findMaxRec(int A[], int n) 
{ 
    // if n = 0 means whole array has been traversed 
    if (n == 1) 
        return A[0]; 
    return max(A[n-1], findMaxRec(A, n-1)); 
} 

我们的目标是拥有一个看起来像这样的函数:

int findMaxBetwen(int A[], int low, int high){
      //Here is where I need help integrating if lets say the array is A[] = 5,6,7,8
      // Call findMaxBetwen(A[], 5, 8) and the output gives 7 because that is the max between the 3 
      //integers.
}

【问题讨论】:

  • 有什么问题?我不知道如何回答这个问题而不破坏你的所有乐趣
  • 提示:在你当前的函数中,是什么导致在第一个元素处停止?从最后一个元素开始的原因是什么?确定这两个并将其替换为从 high 开始并在 low 停止
  • 我现在仍然有点困惑,在我的驱动程序代码中 n 表示为 sizeof(A)/sizeof(A[0]) 这给出了数组长度的大小。所以我应该用低和高替换我当前代码的 n 部分吗??
  • 什么驱动代码?你应该?我不知道,因为我不知道代码。当你尝试时会发生什么?

标签: c++ recursion


【解决方案1】:

更新:C++17 现在定义了一个函数std::size,它可以返回数组的大小。

#include <iostream>
#include <iterator>

using namespace std;

int findMaxRec(const int[] A, const int &n)
{
  if (n <= 0) throw "error: array is empty...";
  if (n == 1) return A[0];
  return std::max(A[n - 1], findMaxRec(A, (n - 1)));
}

int findMaxRec(const int[] A)
{
  return findMaxRec(A, std::size(A));
}

const int& findMaxRec(const int &i)
{
  return i;
}

如果你没有 C++17,你会考虑使用列表吗?

#include <algorithm>
#include <list>

int findMaxRec(const std::list<int> &L)
{
  if (L.size() == 0) throw "error: list is empty...";
  return (*std::max_element(L.begin(), L.end()));
}

findMaxBetwen可以实现为函数模板:

template<typename T> int findMaxBetwen(const T &data, int low, int high)
{
  int i = findMaxRec(data);
  if (i <= low) return low;
  if (i >= high) return high;
  return i;
}

//....

int main(int argc, char** argv)
{
  std::list<int> a = {5, 6, 7, 8, 10};
  cout << findMaxBetween(a, 5, 8) << '\n'; // output is 8

  int b[5] = {5, 6, 7, 8, 10};
  cout << findMaxBetween(b, 5, 8) << '\n'; // output is 8

  int c = 7;
  cout << findMaxBetween(c, 5, 8) << '\n'; // output is 7
}

cppreference了解有关函数模板的更多信息

【讨论】:

    猜你喜欢
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    相关资源
    最近更新 更多