汉若塔问题
问题:将X轴上的64个圆盘在Y轴的帮助下移动到Z轴。其中不允许小盘子在大盘子的下面(限制)
问题分解(满足限制的条件下进行分解):a,将63个从X轴移动到Y轴 b,将X轴第64个盘子移动到Z轴 c,将Y轴的63个盘子移动到Z轴
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。再分解a,c,可得到递归算法:
def hanoi(n,x,y,z):
if(n==1):
print(x,'-->',z);
else:
hanoi(n-1,x,z,y)
print(x,'-->',z)
hanoi(n-1,y,x,z)
总结:问题分解的分支有很多,首先得满足限制,其次分解的规模要越来越小,直到最小问题能被解决。
写递归要学会宏观把握,不要一边写一边想着理清数据的走向和分配,函数就是一个功能,实现一个大功能需要一些同类型的小功能,大胆用就是。

更多精彩