美文网首页
How to think:递归和数独试探算法

How to think:递归和数独试探算法

作者: 过客 | 来源:发表于2018-04-20 10:14 被阅读30次

上次说的计算算法可以根据游戏规则把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,得到结果!

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

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

相关文章

  • How to think:递归和数独试探算法

    上次说的计算算法可以根据游戏规则把100%确凿的数字填入空格,对于可以填入不止一个数字的数独空格,有一个简单的办法...

  • 剑指offer学习笔记:2.4 算法和数据操作

    2.4 算法和数据操作 重点关注二分查找,归并排序和快速排序。很多算法都有递归和循环两种不同实现方法。通常基于递归...

  • How to think:数独解谜者

    也许,我们从小就习惯于学习是为了考试,所以,书本里的知识就仅仅限于书本里,考完了试就万事大吉了,不但书本可以扔到一...

  • 29.算法入门

    算法与数据结构基础 一、基础算法思想二分: 递推: 枚举: 递归: 分治: 贪心: 试探: 模拟: 二、简单数据结...

  • 算法思想

    算法思想有很多,业界公认的常用算法思想有8种,分别是枚举、递推、递归、分治、贪心、试探法、动态迭代和模拟。至于还有...

  • BST Question Summary

    Note:During practice, also practise how to think, how to ...

  • How to think

    你有没有经常在发表看法及回答问题时脑子一篇空白?如果有,那你就跟我一样缺乏主动思考的能力,那如果我想思考表达,又该...

  • 快速幂模板

    递归算法 非递归算法

  • 英语日更第203天,钱是王八蛋,没了你再赚

    How do you think about the money? Somebody think that, M...

  • python递归算法、尾递归算法及优化

    文章概述 递归算法和尾递归概述递归算法的优化 递归算法 介绍:递归算法是计算机编程领域非常重要的一种算法,采用分而...

网友评论

      本文标题:How to think:递归和数独试探算法

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