上次说的计算算法可以根据游戏规则把100%确凿的数字填入空格,对于可以填入不止一个数字的数独空格,有一个简单的办法来解决:试探!我可以依次填入可填的数字,并计算或者试探剩下的空格,重复下去直到全部填满,或者出现矛盾(如下图):

灰色的方格是出现矛盾的地方

你能找出每一个矛盾的方格矛盾在什么地方吗?

试探法的流程图:

从流程图上你就会看出来,这个算法有一个不同寻常的地方,在试探了一个格子之后,它会把试探后的棋盘当作一个新参数,再次调用自己去解决问题!

这种解题的方法,我们称之为递归,类似一只咬住了自己尾巴的蛇!

让我用一个简单的例子来告诉你什么叫做递归:

比如,计算阶乘:3!= 3 x 2 x1,“!”是阶乘符号!普通的做法就是用循环乘法来解决。

换一个思路,计算n的阶乘,可以换算成n* (n-1)!,本来,我们的目标是n的阶乘,我们换成了一个跟A很相似的目标:n乘以n-1的阶乘,这个目标,简单了一点点,总体上,还是使用了A自身(阶乘算法)。递归,就是调用自身,可以简单的如此理解!

现在,n-1的阶乘可以进一步理所当然的换成(n-1)* (n-2)!

递归,就是一步步的进入更深层的自己,

一步步的进入更深层,当然是离问题更远了,它必然有个返回的地方,否则,程序永远不会有结束的时候,也就不会有结果,问题也就不会得到解决!

这里,n一直减下去,直到不能再减,正好,直到1,正好,1的阶乘我们是知道的:1!

从这里,递归的深入开始返回,返回到了1+1的地方,于是我们得到2的阶乘是2x1 = 2,注意,这里的2x1不是阶乘定义上的2x1,是n的阶乘= (n* (n-1)的阶乘)的2x1!

再进一步的返回,到3 了,3!= 3 x(2的阶乘) = 3X2 = 6

再返回,到4, 4! = 4 x3的阶乘 = 4x6=24!

......

直到n,得到结果!

递归有什么好处呢?就是简单!

看过盗梦空间的话,递归的形式,就类似它的梦套梦!

c语言解数独算法递归,How to think:递归和数独试探算法相关推荐

  1. js算法入门(3)--递归

    1简介 递归在前端开发中应用还是非常广泛的,首先DOM就是树状结构,而这种结构使用递归去遍历是非常合适的.然后就是对象和数组的深复制很多库也是使用递归实现的例如jquery中的extend方法.甚至在 ...

  2. 2.2基本算法之递归和自调用函数_数据结构与算法之5——队列和栈

    栈和队列比较简单,而且实用性非常广泛,这里主要介绍一下他们的概念和实现,在很多算法中,栈和队列的运用很重要,因此,虽然简单确是最重要的数据结构之一,必须重视. 栈是保证元素后进先出(后存入者先使用,L ...

  3. 知识库递归编程java和prolog代码;逻辑语言Prolog简介(附24555字PDF发“递归prolog简介”下载)

    知识库递归编程java和prolog代码:逻辑语言Prolog简介(附24555字PDF发"递归prolog简介"下载) 数据简化DataSimp 今天 数据简化DataSimp导 ...

  4. 【转载】NeurIPS 2018 | 腾讯AI Lab详解3大热点:模型压缩、机器学习及最优化算法...

    原文:NeurIPS 2018 | 腾讯AI Lab详解3大热点:模型压缩.机器学习及最优化算法 导读 AI领域顶会NeurIPS正在加拿大蒙特利尔举办.本文针对实验室关注的几个研究热点,模型压缩.自 ...

  5. 基础算法整理(1)——递归与递推

    程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一 ...

  6. 计算机算法设计与分析之----- 递归与分治策略

    递归与分治策略 [Master定理] 快速排序 优化 逆序对(归并算法) 火柴排队[NOIP2013 提高组] 集合求和 方法一: 递归 (2^n ) 方法二: 组合数学知识 [HNOI2008]越狱 ...

  7. NeurIPS 2018 | 腾讯AI Lab详解3大热点:模型压缩、机器学习及最优化算法

    导读:AI领域顶会NeurIPS正在加拿大蒙特利尔举办.本文针对实验室关注的几个研究热点,模型压缩.自动机器学习.机器学习与最优化算法,选取23篇会议上入选的重点论文进行分析解读,与大家分享.Enjo ...

  8. 算法高级(28)-递归、分治、动态规划、贪心、回溯、分支限界几大相似算法比较

    在学习算法的过程中,递归.分治.动态规划.贪心.回溯.分支限界这些算法有些类似,都是为了解决大问题,都是把大问题拆分成小问题来解决,但她们之间还是有一些不同之处的,我来给同学们整理一下. 一.算法思想 ...

  9. 【Java数据结构与算法】第五章 递归、迷宫回溯和八皇后问题

    第五章 递归 文章目录 第五章 递归 一.递归 1.概念 2.代码实现 3.递归的规则 二.迷宫回溯 1.要求 2.代码实现 三.八皇后问题 1.介绍 2.思路 3.代码实现 一.递归 1.概念 简单 ...

最新文章

  1. 给ModalPopupExtender控件添加弹出关闭等事件
  2. SOA与云计算相结合推动企业发展
  3. 关于项目进度慢的思考----如何提高整体开发效率
  4. volatile 关键字解析
  5. jzoj4739-[雅礼联考GDOI2017模拟9.2]Ztxz16学图论【LCT,树状数组】
  6. leetcode695. 岛屿的最大面积(dfs)
  7. 如何使用scikit-learn工具来进行PCA降维
  8. 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 xor (根号分治)
  9. python对一串列表计数然后画扇形图_python – 按行分组的DataFrame列的高效计数
  10. unix文件中i节点
  11. Hough变换的理解
  12. SEO优化工具,查询死链VisualSEOStudio-2.0.2.3
  13. bzoj 1779: [Usaco2010 Hol]Cowwar 奶牛战争 (网络流)
  14. HTTP(S) 路由器 fabio
  15. 基于LCC谐振补偿网络的无线充电技术的研究
  16. iOS App 签名的原理 App 重签名(三)
  17. 第一章:第1章 CRM核心业务介绍--概述,crm架构,公司组织结构,软件开发的生命周期,crm项目的核心业务介绍。...
  18. MAC地址解析-广播地址、组播地址和单播地址的特征
  19. 结构设计模式:复合模式
  20. dpi和ppi换算_八一八那些px、pt、ppi、dpi、dp、sp之间的关系

热门文章

  1. 关于健康吗、核算检测等系统高并发问题的一些思考
  2. python解释器的安装
  3. 第一次搭建vue项目--添加依赖包、启动项目
  4. loj#2541. 「PKUWC2018」猎人杀
  5. oracle 中查询当前用户可以看到的表名、表对应的所有字段
  6. 利用StringUtils可以避免空指针问题
  7. 外媒:ATT宣布加入SD-WAN阵营
  8. GoldenGate 之 Bounded Recovery说明
  9. Android集成支付宝支付
  10. 算法笔记_096:蓝桥杯练习 算法提高 求最大值(Java)