Python八皇后问题的学习体会与分析-递归的运用
2017-02-08 22:37
316 查看
这是教材上的代码:
def conflict(state, nextX): nextY = len(state) for i in range(nextY): if abs(state[i]-nextX) in (0, nextY-i): return True return False def queens(num, state=()): #print num,state for pos in range(num): if not conflict(state, pos): if len(state) == num-1: yield (pos,) else: for result in queens(num, state+(pos,)): #生成八或N个的元组 yield (pos, ) + result分析一:
1.此种方法看上去较酷,感到很高大上的编程。占用内存小,运用了生成器。
2.教材上讲了如果不能安排好下一下皇后,则进行上一个皇后的位置改变,再迭代。但我感觉是究举之后的依次判断,即列出所有可能的位置组合,再进行一一判断。
3.可以先理解,用递归实理的N层迭代。如下代码
def my_func(num, state=()):
for i in range(9):
print i,
if len(state) == num-1:
yield (len(state),)
#print "len state",len(state)
else:
for result in my_func(num, state+(0,)):
yield (len(state),)+result
print "resault....",result
a=list(my_func(8))
4.用递归实现的N层迭代:
def test(num,state=()):
print "start.",
for i in range(num):
print i,
if len(state)==num-1:
yield (100,)
else:
for result in test(num,state+(0,)):
print "in."
print "recur...len result is: ",len(result),result
yield (50,)+result
a=list(test(4))
print len(a)
print a两个yield很关键,第一个是结束递归的条件,第一个,生成N个的元组,练习时可以改i,为POS,就像八皇后了。
5.理解了4.对于八皇后,就更易理解了。加了对冲突的判断,即便是要找的解了。
相关文章推荐
- Python学习体会
- 数据库学习:oracle的递归写法,分析函数写法,以及teradata的取一定数量记录的写法
- 【学习笔记】python版希尔排序及其时间复杂度分析
- 学习Python的体会 (2)
- 学习Python的体会 (1)
- 我学习python的体会
- python 递归分析
- Android学习之Adapter(适配器)源代码分析与观察者模式的运用(一)
- Android学习之Adapter(适配器)源代码分析与观察者模式的运用(一)
- 递归调用输出元素 分类: python 小练习 python基础学习 2013-06-30 11:54 278人阅读 评论(0) 收藏
- 从C#到Python —— 谈谈我学习Python一周来的体会
- Python Django 学习笔记 Python简单运用(二)
- 从C#到Python —— 谈谈我学习Python一周来的体会
- 【学习笔记】python版选择排序和插入排序及时间复杂度分析
- Dive Into Python 学习记录3-对获取某文件夹下MP3文件信息的代码构成分析
- 学习递归下降分析 Recursive Descent Parser
- Python源码分析--学习笔记一
- 【转】从C#到Python —— 谈谈我学习Python一周来的体会
- python 学习体会
- 关于动画特效师学习Python还是C++的几个分析(别人的)