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 - - - -

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐