题:

在一个数组指定范围内找出最大值,使用二分法。

输入:

数组起始下标;数组结束下标;数组地址

输出:

数组指定范围内的最大值

具体函数:

uint16 Max(uint16 start, uint16 end, uint16 array[])
{
    uint16 left = 0;
    uint16 right = 0;
    uint16 mid = (start + end) / 2;
    
    if (start == end)
    {
        return (array[start]);
    }

    if ((1 + start) == end)
    {
        return ((array[start] < array[end]) ? (array[end]) : (array[start]));
    }

    left = Max(start, mid, array);
    right = Max(mid + 1, end, array);

    return ((left < right) ? (right) : (left));
}

测试程序:

uint16 g_Array[] = {1, 2, 3, 4, 5};

int main(int argc, char* argv[])
{
    uint16 maxVal = Max(0, 4, g_Array);
    printf("The max value is : %u \n", maxVal);

    return 0;
}

如果进入程序调试,可以看到执行步骤如下:

Max(0, 4)  >>>  Max(0, 2)  >>>  Max(0, 1)  >>>  Max(2, 2)  >>>  Max(3, 4)

以上为函数调用步骤,当然我这里忽略了数组地址。

我这里粗略画了一个流程图:、

浅析双重递归---个人理解

 

 

相关文章:

  • 2021-08-29
  • 2021-09-01
  • 2022-02-22
  • 2021-05-26
  • 2021-08-13
  • 2021-10-18
猜你喜欢
  • 2021-12-17
  • 2021-12-31
  • 2021-11-14
  • 2022-01-23
  • 2021-12-02
  • 2022-12-23
  • 2021-08-09
相关资源
相似解决方案