递归与分治

本文探讨了递归和分治策略在编程中的应用。递归是一种强大的编程技术,虽然可能导致较高的内存开销,但在某些情况下能提高代码的可读性。分治策略基于递归,通过将复杂问题分解为更小的部分来解决。以快速排序为例,它通过选择基准值,将数组分为小于和大于基准值的两部分,然后递归地对这两部分进行排序,最终达到排序整个数组的目的。关键词涵盖了递归、分治、快速排序等概念。
摘要由CSDN通过智能技术生成

1. 递归

“如果使用循环,程序的性能可能更高;如果使用递归,程序可能更容易理解”——Stack Overflow

编写递归函数时,必须告诉它何时停止递归。

  • 基线条件,达到这个条件时,函数不再调用自己,从而避免无线循环(通常是个if语句)
  • 递归条件,递归函数调用自己

注意:递归使用到了栈结构,所以递归所占的内存开销很大

2. 分治(Divide & Conquer)

2.1 分治的思想

它采用了分而治之的思想,使用了递归的方法去实现分而治之。换句话说你可以将分治理解为递归的一个应用。

使用D&C解决问题的过程包括两个步骤:

① 找出基线条件,这种条件必须尽可能简单(例如涉及数组的递归问题时,基线条件一般是数组为空或只包含一个元素)

② 不断缩小问题规模(使用递归),直到符合基线条件

2.2 分治——快速排序

快速排序详解

def quick_sort(array):
	if len(array) < 2:  # 基线条件
		return array
	else:
		pivot = array[0]  # 选择基准值
		less = [i for i in array[1:] if i <= pivot] # 由所有小于等于基准值的元素组成的子数组
		greater = [i for i in array[1:] if i > pivot] # 由所有大于等于基准值的元素组成的子数组
		return quick_sort(less) + [pivot] + quick_sort(greater) # 递归条件,因为缩小了问题规模
		

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

InceptionZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值