递归方法设计c语言中数独游戏,How to think:递归和数独试探算法

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

706f1d5976c3

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

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

试探法的流程图:

706f1d5976c3

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

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

706f1d5976c3

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

比如,计算阶乘: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,得到结果!

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值