recursive

PostgreSQL的递归查询(with recursive)

流过昼夜 提交于 2020-04-09 04:48:10
开发有需求,说需要对一张地区表进行递归查询,Postgres中有个 with recursive 的查询方式,可以满足递归查询(一般>=2层)。 测试如下: create table tb(id varchar(3) , pid varchar(3) , name varchar(10)); insert into tb values('002' , 0 , '浙江省'); insert into tb values('001' , 0 , '广东省'); insert into tb values('003' , '002' , '衢州市'); insert into tb values('004' , '002' , '杭州市') ; insert into tb values('005' , '002' , '湖州市'); insert into tb values('006' , '002' , '嘉兴市') ; insert into tb values('007' , '002' , '宁波市'); insert into tb values('008' , '002' , '绍兴市') ; insert into tb values('009' , '002' , '台州市'); insert into tb values('010' , '002' , '温州市')

一个很Cool的idea->Python的尾递归优化(转)

戏子无情 提交于 2020-03-15 23:20:10
偶然在国外一个网站瞅到的,非常的酷,发出来共享一下。一般来说,Python和Java,C#一样是没有尾递归自动优化的能力的,递归调用受到调 用栈长度的限制被广泛的诟病,但是这个狂人用一个匪夷所思的方法解决了这个问题并在Python上实现了,从此Python的递归调用再也不用受到调用栈 长度的制约,太酷了。 首先我们还是从递归说起,之前我发过一篇 《 浅谈递归过程以及递归的优化 》其中用到了斐波那契数来作为例子.线性递归的算法由于太过一低效就被我们Pass掉了,我们先来看尾递过方式的调用: 1 def Fib(n,b1 = 1 ,b2 = 1 ,c = 3 ): 2 if n < 3 : 3 return 1 4 else : 5 if n == c: 6 return b1 + b2 7 else : 8 return Fib(n,b1 = b2,b2 = b1 + b2,c = c + 1 ) 9 这段程序我们来测试一下,调用 Fib(1001)结果: >>> def Fib(n,b1=1,b2=1,c=3): ... if n<3: ... return 1 ... else: ... if n==c: ... return b1+b2 ... else: ... return Fib(n,b1=b2,b2=b1+b2,c=c+1) ... >>> Fib(1001)