您的位置:首页 > 编程语言 > Python开发

用python的生成器yield轻松解决8皇后的问题以及斐波拉契数列

2017-10-14 10:41 471 查看
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=8, 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,)):
yield (pos,) + result

print(list(queens(8)))
print(len(list(queens(8))))


# 不使用生成器
def fib1(max):
res = []
n, a, b = 0, 0, 1
while n < max:
res.append(a + b)
a, b = b, a + b
n += 1
return res

# 使用生成器
def fib2(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n += 1

f1 = fib1(5)
print(f1)
for i in fib2(10):
print(i)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐