递归及八皇后问题的Python实现

1. 递归的定义

无论学习哪一种编程语言,递归方法是绕不过去的一个门槛。何为递归?在计算机世界里,递归就是自己调用自己。使用递归的好处就是能用优雅的解决方案来解决那些利用循环很难实现的问题,比如汉诺塔问题、八皇后问题和遍历文件夹问题等等。

2. 递归的逻辑

一般来说,实现递归方案分为两步。第一步就是把一个需要做N次的问题分解为做到了第N-1次后,再做最后一次的过程,第二步就是找到这个过程收敛的终止条件。例如我们要求一个数的阶乘n!。如果我们知道了(n-1)!,那么最后一次的过程就是n*(n-1)!;然后我们知道这个过程的终止条件是1! = 1. 这样递归的方案就可以做出来了。

3. 八皇后问题

八皇后问题就是在一个8x8的棋盘里面放置八个皇后,使得这八个皇后两两之间不会相互攻击。根据国际象棋的规则,皇后可以走直线和对角线。所以他们之间不能同时出现在同一行、同一列或者对方的对角线上。

 4. 八皇后问题Python实现

这是八皇后问题的其中一种实现方式。

NUMBER = 8
Queens = NUMBER * [-1]

def IsPositionValid(row, column):
    for i in range(0, row):
        if Queens[i] == column or abs(Queens[i] - column) == abs(i - row):
            return False
    return True
           
def FindPosition(n):
    if n == NUMBER:
        return True

    for column in range(NUMBER):
        Queens[n] = column
        if IsPositionValid(n, column) and FindPosition(n + 1):
            return True

def DisplaySolution():
    for i in range(NUMBER):
        for j in range(NUMBER):
            if Queens[i] == j:
                print("Q", end = ' ')
            else:
                print("-", end = ' ')
        print()

def main():
    FindPosition(0)
    DisplaySolution()


main()

Windows 10, Python 3.8, IDLE运行结果如下

Q - - - - - - - 
- - - - Q - - - 
- - - - - - - Q 
- - - - - Q - - 
- - Q - - - - - 
- - - - - - Q - 
- Q - - - - - - 
- - - Q - - - -

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值