在用递归求解问题的时候,边界条件重要,子过程的划分一样重要,子过程反映了求解问题思路。
将数组求最大值的问题划分子过程,采用左右划分。即将一个数组左右 「切成」两半,求取左侧最大值及右侧最大值,再二者之间返回最大值即可,其中左侧与右侧再按此划分,直到不能再划,即「当前半边」只有一个数组元素了。
例子实现 C++ 代码:
#ifndef _MY_ALGORITHM_
#define _MY_ALGORITHM_
namespace corlin {
class Algorithm {
public:
static int maxVar(int array[], int length)
{
int ret;
ret = getMax(array, length, 0, length - 1);
return ret;
}
private:
static int getMax(int array[], int length, int left, int right)
{
if(array == nullptr || length < 0 || right >= length)
{
throw(1);
}
if(left == right)
return array[left];
int leftMax = getMax(array, length, left, left + (right - left) / 2);
int rightMax = getMax(array, length, right - (right - left) / 2, right);//注意:这里的区间是右边减一半到右边,不是左边加一半
return leftMax > rightMax ? left : right;
}
};
}
#endif