总结递归回溯算法

作者: 先生zeng | 来源:发表于2019-09-18 16:05 被阅读0次

概念:

简单的说,递归就是方法自己调用自己,每次调用时都传入不同的变量。

递归的调用机制

1.打印问题

2.阶层问题

image

如上图,递归调用时,每次执行到方法时,就会开辟一个独立的空间(栈),依次叠加在栈顶,从上往下执行,把上一个执行的返回结果返回给下一下元素。同时每个空间的数据(局部变量)是独立的。

能够解决哪些问题

  1. 各种数问题,比如八皇后问题,汉诺塔,阶层问题,迷宫问题、球和篮子的问题。。。。
  2. 各种算法中也会用到递归。快排、归并排序、二分查找、分治算法等。。。。
  3. 将用栈解决的问题。

使用

三种情况常常用到递归方法。

  1. 定义是递归的
image
  1. 数据结构是递归的
image
  1. 问题的解法是递归的
image

使用时需要注意

  1. 执行一个方法时就创建一个新的受保护的独立空间。
  2. 方法的局部变量是独立的。
  3. 如果方法中使用引用类型的变量(比如数组),就会共享该引用类型的数据
  4. 递归必须向退出递归条件逼近,否则就是会无限递归,出现栈溢出
  5. 当一个方法执行完毕,或遇到return,就会遵守谁调用,就将结果返回给谁。

使用递归解决迷宫问题

问题:
有一个迷宫地图,有一些可达的位置,也有一些不可达的位置(障碍、墙壁、边界)。从一个位置到下一个位置只能通过向上(或者向右、或者向下、或者向左)走一步来实现,从起点出发,如何找到一条到达终点的通路。

链接:
https://www.jianshu.com/p/06326204ba7d

使用递归回溯解决八皇后问题

八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。

链接:
https://www.jianshu.com/p/6618146d16ea

斐波那契数列的函数Fib(n)的定义

image
  long Fib ( long n ) {
    if ( n <= 1 ) return n;     
    else return Fib (n-1) + Fib (n-2);
  }

相关文章

  • 8.30 leetcode刷题(2)

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

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

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

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

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

  • 递归2-回溯与递归

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

  • 总结递归回溯算法

    概念: 简单的说,递归就是方法自己调用自己,每次调用时都传入不同的变量。 递归的调用机制 1.打印问题 2.阶层问...

  • 回溯递归算法

    回溯大法严重依赖【递归】 1、求子集 78. 子集[https://leetcode-cn.com/problem...

  • 回溯算法,Leetcode 46和Leetcode 980

    什么是回溯算法,以及什么时候会用到 回溯算法和递归有关系。它是利用递归来寻找一个问题的所有解,例如一个数组的排列组...

  • 回溯算法总结

    回溯法学习总结 回溯算法也是算法导论中常用的算法,回溯算法类似于暴力求解算法,经常用在求可能解的问题。下面我将从三...

  • 12.矩阵路径

    思路: 使用回溯算法 回溯算法的实现方式是利用递归 可以借助画树形图来分析所需要的变量和条件 具体细节: 定义好终...

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

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

网友评论

    本文标题:总结递归回溯算法

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