【算法】关于递归函数返回值的理解。

本文通过实例分析了如何使用递归函数解决最大子数组问题,详细解释了递归过程中数组的二分处理,以及如何确定最大子数组的返回值。在递归过程中,数组不断被二分,直到每个子数组只剩一个元素,然后逐步回溯并计算左右两侧及跨中值的最大和,最终得到整个数组的最大子数组和。
摘要由CSDN通过智能技术生成

本次代码用最大子数组问题(可参考算法导论, 即寻找数组arr中和最大的非空连续子数组,时间复杂度为O(nlogn)


package main

func findmaxcrossarr(arr []int, low, high, mid int) (int, int, int) {
	leftsum, rightsum := 0, 0
	leftindex, rightindex, temp := 0, 0, 0
	for i := mid; i >= low; i-- {
		temp = temp + arr[i]
		if temp > leftsum {
			leftsum = temp
			leftindex = i
		}
	}
	temp = 0
	for i := mid + 1; i <= high; i++ {
		temp = temp + arr[i]
		if temp > rightsum {
			rightsum = temp
			rightindex = i
		}
	}
	return leftindex, rightindex, (leftsum + rightsum)
}

func findmaxsubarr(arr []int, low, high int) (int, int, int) {
	if low == high {
		return low, high, arr[low]
	} else {
		mid := int((low + high) / 2)
		leftlow, lefthigh, leftsum := findmaxsubarr(arr, low, mid)
		rightlow, righthigh, rightsum := 
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值