逐步骤讲解Python数组反转的递归方法实现逻辑
递归反转数组代码执行逻辑详解
完整实现代码
# 递归反转数组的Python程序 # 函数功能:反转数组A中下标从start到end的部分 def reverseList(A, start, end): # 递归终止条件:首尾指针相遇或交叉,不需要再交换 if start >= end: return # 交换当前首尾指针指向的元素 A[start], A[end] = A[end], A[start] # 缩小问题规模:左指针右移,右指针左移,递归处理内层子数组 reverseList(A, start+1, end-1) # 测试代码 A = [1, 2, 3, 4, 5, 6] print(A) reverseList(A, 0, 5) print("Reversed list is") print(A)
核心逻辑说明
这个递归方法基于分治思路,每次只处理当前待反转子数组的首尾元素交换,剩下的内层子数组的反转问题和原问题逻辑完全一致,因此可以递归调用自身完成,直到待处理的子数组长度≤1时(不需要再反转)停止。
注意:Python中列表属于可变对象,函数内对列表元素的修改会直接作用于原列表,因此该函数不需要额外返回反转后的数组
逐步骤执行拆解(以示例输入A = [1,2,3,4,5,6]为例)
初始调用为reverseList(A, 0, 5),执行流程如下:
- 第一层调用:start=0,end=5,
0<5不触发终止条件,交换A[0]和A[5],数组变为[6,2,3,4,5,1],递归调用reverseList(A,1,4) - 第二层调用:start=1,end=4,
1<4不触发终止条件,交换A[1]和A[4],数组变为[6,5,3,4,2,1],递归调用reverseList(A,2,3) - 第三层调用:start=2,end=3,
2<3不触发终止条件,交换A[2]和A[3],数组变为[6,5,4,3,2,1],递归调用reverseList(A,3,2) - 第四层调用:start=3,end=2,
3>=2触发终止条件,直接返回,递归逐层结束,整个反转操作完成
运行结果说明
程序输出如下:
# 初始打印原数组 1 2 3 4 5 6 Reversed list is # 调用反转函数后打印的结果 6 5 4 3 2 1
内容的提问来源于stack exchange,提问作者Vicky
相关产品推荐
相关产品推荐

