美文网首页Java数据结构和算法
数据结构与算法之 递归与回溯算法

数据结构与算法之 递归与回溯算法

作者: 测试员 | 来源:发表于2019-08-22 16:13 被阅读0次

概念

简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。

递归用于解决什么样的问题

各种数学问题如: 8皇后问题 , 汉诺塔, 阶乘问题, 迷宫问题, 球和篮子的问题
各种算法中也会使用到递归,比如快排,归并排序,二分查找,分治算法等.
将用栈解决的问题-->第归代码比较简洁

递归需要遵守的重要规则

执行一个方法时,就创建一个新的受保护的独立空间(栈空间)
方法的局部变量是独立的,不会相互影响, 比如n变量
如果方法中使用的是引用类型变量(比如数组),就会共享该引用类型的数据.
递归必须向退出递归的条件逼近,否则就是无限递归,出现StackOverflowError,死龟了:)
当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕。

八皇后案例代码实现

    package com.yuan.common.recursion;
    
    
    import java.util.Arrays;
    
    public class Queen8 {
    
        /**
        * 初始化棋子🚩数组
        */
        private static int count = 1;
        private static int max = 8;
        private static int[] arr = new int[max];
    
        /**
        * 放置棋子,并于第八个结束(从零开始)
        *
        * @param n
        */
        public static void place(int n) {
            if (n == 8) {
                print();
            } else {
                //每次放置时,先放到第一列,行则下一行。不行下一列
                for (int i = 0; i < 8; i++) {
                    arr[n] = i;
                    //没冲突就放下一个旗子
                    if (!check(n)) {
                        place(n + 1);
                    }
                    //如果冲突就放到下一列
                }
            }
        }
    
        /**
        * 检查与之前的n-1个旗子的位置是否有冲突
        *
        * @param n
        */
        public static boolean check(int n) {
            for (int i = 0; i < n; i++) {
                if (arr[i] == arr[n] || Math.abs(arr[i] - arr[n]) == Math.abs(i - n)) {
                    return true;
                }
            }
            return false;
        }
    
    
        public static void print() {
            System.out.println("第" + count++ + "个正确摆放结果 :" + Arrays.toString(arr));
        }
    
        public static void main(String[] args) {
            place(0);
    
        }
    
    
    }

相关文章

  • 递归2-回溯与递归

    I. 回溯算法基础 回溯与递归的区别和联系  很多人不理解回溯与递归到底是什么关系。其实很简单,回溯算法是一种算法...

  • 数据结构与算法之 递归与回溯算法

    概念 简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂的问题,同时可以让代...

  • 高级算法设计与分析

    目录 算法基础 算法复杂性 递归与分治 回溯法与分支限界法 贪心算法 动态规划法 NP问题 概率算法 现代优化算法...

  • 数据结构与算法

    数据结构与算法之美 数据结构与算法之美1--如何学数据结构与算法之美2--复杂度分析(上)数据结构与算法之美3--...

  • 数据结构与算法简述(下)

    目录: 算法简介 排序算法 递归与穷举 贪心与分治 动态规划和回溯 1.算法简介 解题方案的准确而完整的描述,是一...

  • 一位算法工程师的自我修养

    数据结构与算法 基本算法思想动态规划贪心算法回溯算法分治算法枚举算法 算法基础 时间复杂度 空间复杂度 最大复杂度...

  • 8.30 leetcode刷题(2)

    递归和回溯:17 电话号码 思路:运用递归去实现回溯算法的思想。回溯算法本质上是一种暴力搜索,通过递归调用去实现,...

  • 走迷宫算法(C回溯递归)

    引言 迷宫算法在很多场景都非常实用,比如游戏中的机器人等。而且高级的迷宫算法与回溯、递归也是息息相关的。而且回溯的...

  • 递归、迭代、回溯、广度和深度优先

    在学习算法的时候,经常碰到递归、迭代、回溯、广度优先和深度优先算法,可是回溯使用了递归,深度优先也使用了递归,广度...

  • 二叉树算法之0-计算二叉树的深度

    算法思想:使用递归 算法解析:分别递归左树和右树,递归到叶子节点时返回0,递归回溯时值+1,不断累积回溯的深度,每...

网友评论

    本文标题:数据结构与算法之 递归与回溯算法

    本文链接:https://www.haomeiwen.com/subject/paknsctx.html