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

题:

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

输入:

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

输出:

数组指定范围内的最大值

具体函数:

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)

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

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值