递归的概念
**简单的说:**递归是方法自己调用自己,每次调用时传入不同的变量。递归有助于编程者解决复杂的问题,让代码变得简洁
递归需要解决的重要规则
1)执行一个方法时,就创建一个新的受保护的独立空间(栈空间)
2)方法的局部变量是独立的,不会互相影响
3)如果方法中使用的是引用类型变量(比如数组),就会共享引用类型的数据讲
4)递归必须向退出递归的条件逼近,否则就是无限递归,出现StackflowError,死递归。
5)当一个方法执行完毕 或者 遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕。
递归-迷宫问题
说明:
小球得到的路径,和程序员设置的找路策略有关。即:找路的上下左右的顺序相关
再得到小球路径时,可以先使用(下右上左),再改成(上右下左),看看路径是不是有变化
测试回溯现象
思考: 如何求出最短路径?
Python代码
'''
// 使用递归回溯给小球找路
// 说明:
// map表示地图
// 起点为(1,1)
// 终点为(6,5)
// map[i][j]=0为空,=1为墙,=2表示可以走,=3表示路走不通
// 前进方向策略:下-》右->左-》上,如果走不通,就回溯
'''
def setWay(map,i,j):
if map[6][5]==2:
return True
else:
if map[i][j]==0:
map[i][j]=2
if setWay(map,i+1,j):
return True
elif setWay(map,i,j+1):
return True
elif setWay(map,i-1,j):
return True
elif setWay(map,i,j-1):
return True
else:
map[i][j]=3
return False
else:
return False
# 先创建一个二维数组,模拟迷宫
map = [[0 for col in range(7)] for row in range(8)]
for i in range(7):
map[0][i]=1
map[7][i]=1
for i in range(8):
map[i][0]=1
map[i][6]=1
map[3][1]=1
map[3][2]=1
map[5][3]=1
map[5][4]=1
map[5][5]=1
#输出迷宫
print("原来的迷宫----------")
for i in range(8):
for j in range(7):
print("%2d"%map[i][j],end='')
print()
setWay(map,1,1)
print("找到路径后:2为走过的点,3为走过但走不通的点")
for i in range(8):
for j in range(7):
print("%2d"%map[i][j],end='')
print()