具现化骨牌描述递归方法-递归判断

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了具现化骨牌描述递归方法-递归判断相关的知识,希望对你有一定的参考价值。

那么从之前随机生产的数据得到较多量[骨牌存储箱]的数据。
我们将利用这部分数据进行演示关于地递归的利用技巧。
以下注释较多。如果不喜欢的话可以不看,并不影响对递归方法的理解。
  • 递归代码:
技术分享
 1 /*
 2     1、首先:
 3         假设情形:现在要利用现有的骨牌进行多米诺骨牌游戏。
 4     2、拍列:
 5         我们现在要知道第一骨牌推到的具体是那些(可多骨牌推到-多数据流同时进行就是码SQL的一大优势,所以小弟劝戒大家能不用游标就不用游标),之后往后面继续排序。排序可行的规则可以参照现实。
 6     3、推牌:
 7         我们根据已经排列好的牌,开始推到。在牌进行的过程我们可以在这个过程添加过程标识。
 8     */
 9 
10     WITH 排列 AS (
11     SELECT DENSE_RANK()OVER(ORDER BY 骨牌类型) AS LogoID -- 给骨牌分组,就是要同时进行推到的骨牌组
12     ,ROW_NUMBER()OVER(PARTITION BY 骨牌类型 ORDER BY 骨牌重量) AS OrderID -- 给骨牌排序,这边就是以骨牌重量从轻的骨牌到重的骨牌排序
13     ,[骨牌存储箱].*
14     FROM [骨牌存储箱] WITH(NOLOCK)
15     WHERE 1+1=2
16     )
17     -- DROP TABLE #排列
18     SELECT * INTO #排列
19     FROM 排列 WITH(NOLOCK)
20     CREATE CLUSTERED INDEX PK_LogoID ON #排列(LogoID);
21 
22     WITH 
23     递归 AS(
24         SELECT *
25         ,1 AS NCount -- 我们可以在递归过程给递归的牌子做标记(任意发挥)
26         FROM #排列 初始
27         WHERE 初始.OrderID = 1 -- 第一块推到的
28 
29         UNION ALL
30 
31         SELECT 递归源.*
32         -- 以下:这个这个递归方法最重要的点,就是递归过程要执行的操作。
33             -- 举个现实的例子:当客户存在消费冲突的时候,也许在1天的时间内为客户冲动期,过了1天后至3天内的都为客服成效调解期。那么我们要确定客服成效期是在那个时间段,我们需要从时间上推导,在之前1天无冲动期,或者突然出现新状况投诉。
34         ,CASE 
35             WHEN 递归.NCount <= 3
36             THEN NCount + 1
37             ELSE 1
38          END
39         FROM #排列 递归源
40         JOIN 递归 ON 递归源.LogoID= 递归.LogoID
41         WHERE 递归源.OrderID = 递归.OrderID + 1 
42     )
43     SELECT 递归.*
44     FROM 递归 
45     ORDER BY LogoID,骨牌重量
46     OPTION(MAXRECURSION 0)-- 0表无限递归次数
View Code
  • 执行结果:
 技术分享
以上仅代表个人见解,不喜着可以呲之以鼻,但是请勿喷!

以上是关于具现化骨牌描述递归方法-递归判断的主要内容,如果未能解决你的问题,请参考以下文章

递归方法-库存填充

JavaSE 方法的使用

代码重构 & JDT判断一个方法是否是实现重写,继承重写和递归

递归方法判断回文

java递归和递推应用的小程序

递归算法深入浅出四:递归判断回文串以及递归辅助方法