开发者社区> 问答> 正文

请问dataworks中如何定义递归函数?

我需要把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;

展开
收起
mujmkjtup4cgu 2020-12-21 16:18:45 1239 0
1 条回答
写回答
取消 提交回答
  • 递归函数的另一个案例是斐波纳契数列。

    斐波纳契数列: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循环),所以很少使用。

    2021-02-03 18:25:34
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
DataWorks数据集成实时同步最佳实践(含内测邀请)-2020飞天大数据平台实战应用第一季 立即下载
DataWorks调度任务迁移最佳实践-2020飞天大数据平台实战应用第一季 立即下载
基于DataWorks数据服务构建疫情大屏-2020飞天大数据平台实战应用第一季 立即下载

相关实验场景

更多