我需要把Oracle中自定义递归函数转换为dataworks中的递归函数。 Oracle中的递归函数如下: CREATE FUNCTION getParentList (rootId VARCHAR (50)) RETURNS VARCHAR (1000) BEGIN DECLARE sParentList VARCHAR (1000) ; DECLARE sParentTemp VARCHAR(1000); SET sParentTemp =CAST(rootId AS CHAR); WHILE sParentTemp IS NOT NULL DO IF (sParentList IS NOT NULL) THEN SET sParentList = CONCAT(sParentTemp,sParentList); ELSE SET sParentList = CONCAT(sParentTemp); END IF; SELECT GROUP_CONCAT(pcompid) INTO sParentTemp FROM COMP WHERE dccode=${dccode} AND COALESCE(DATAAREA, 0) = 0 AND ACCBOOKID=0 and vpd_year='2019' and FIND_IN_SET(compid,sParentTemp)>0; END WHILE; RETURN sParentList;
递归函数的另一个案例是斐波纳契数列。
斐波纳契数列:1,1,2,3,5,8,13。。。(该数列中,有n个数字,从第三个数字开始:数值 =前一个数字 + 前面一个数字)
即,n=(n-2)+(n-1)
复制代码 1 def get_num(n):#获取斐波拉契数列中第n个数字的值 2 if n==1 or n==2: 3 return 1 4 return get_num(n-1) + get_num(n-2) 5
6 #把获取的斐波拉契数字存放到列表中 7 nums=[] 8 for i in range(1,21): 9 nums.append(get_num(i))#get_num获得一个斐波拉契数字 10
11 print(nums) 复制代码 输出结果为:
1 [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765] 2 [Finished in 0.4s] 以上两个案例是递归函数的经典案例,需要记住其使用方法。注意:在实际使用中,递归函数由于消耗时间比较长(相比for循环和while循环),所以很少使用。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。