递归

Mysql sql语句递归查询

僤鯓⒐⒋嵵緔 提交于 2020-02-05 21:27:01
1.今天接到任务要写一个sql来找出登陆人的部门层级关系,这是写完的sql,主要用到了sql递归查询,今天记录一下。 CREATE FUNCTION `GET_LX_DEPTNAME`(`loginId` bigint) RETURNS varchar(21845) CHARSET utf8 BEGIN DECLARE sTemp_level VARCHAR(500); DECLARE sTemp_id VARCHAR(500); DECLARE sTemp_name VARCHAR(500); DECLARE lx_dept_id VARCHAR(500); DECLARE lx_dept_name VARCHAR(21845); DECLARE sTemp_count int; #先判断登录人 select A.GROUP_LEVEL ,A.PARTY_ID,A.GROUP_NAME into sTemp_level ,sTemp_id ,sTemp_name -- ,A.GROUP_NAME,B.PARTY_ID_FROM AS HR_ID from HR_ORGANIZATION a,COM_PARTY_RELATIONSHIP b,ep_r_user_login c where A.PARTY_ID = B.PARTY_ID_FROM AND B.PARTY_ID_TO

匿存函数,内存函数,递归函数,二分法查找

∥☆過路亽.° 提交于 2020-02-05 21:01:22
一.匿名函数(lambda) 语法: lambda 参数: 返回值 函数名统一都叫lambda 1.把普通函数转换成匿名函数 def func(n) return n * n ret = func(9) print(ret) 普通 a = lambda n: n * n ret = a(9) print(ret) 匿名 其中a可以认为是函数名,但是在__name__中函数名统一是lambda print(func.__name__) #查看函数名 print(a.__name__) #__name__的值都是<lambda> 查看函数名 def func(a, b) return a + b x = lambda a, b : a+b print(x(a , b)) 两个参数的匿名函数 def func(x, y) return x, y s = lambda x, y :(x, y)#如果不放(),s会被分为两部分 lambda x, y :x和y print(s(250, 38)) 两个返回值的匿名函数 fn = lambda *args :max(args) #匿名函数一定是一行函数 print(fn(1,3,8,56))#56 求最大值 二.sorted() 排序函数 语法:sorted(iterable, key, reverse) key:排序规则. 运行流程:

Day 15 内置函数补充

血红的双手。 提交于 2020-02-05 20:19:22
内置函数 1, lambda 匿名函数 lambda 参数: 返回值 函数名统一都叫lambd # print("你好. 我\\叫周润发") # 对用户是友好的. 非正式的字符串 # # # 正式(官方)的字符串, 面向对象的时候 # print(repr("你好, 我\'叫周润发")) # 程序中内部存储的内容, 这个是给程序员看的 # print("我叫%r" % "周润发") # %r 实际上调用的是repr() # 原样输出 # print(r"马化腾说:\"哈哈哈, \" \n\t") print("你好") # 用户看着舒服 print(repr("你好")) # 真实的字符串表示形式(正式的) __str__() __repr__() # 普通的正常的函数 # def func(n): # return n * n # # # ret = func(9) # # print(ret) # # # # # 匿名函数, 语法: lambda 参数: 返回值 # a = lambda n : n * n # # ret = a(9) # # print(ret) # b = lambda x: x+1 # print(a(5)) # 函数的名字可以认为是a # # print(func.__name__) # 查看函数的名字 # print(a.__name__) # _

Python内置函数二 (递归函数,匿名函数,二分法)

╄→尐↘猪︶ㄣ 提交于 2020-02-05 20:17:28
匿名函数 lambda() 语法: lambad 参数 : 返回值 1 def func(a,b): 2 return a * b 3 print(func(2,5)) 4 5 a = lambda a ,b : a*b # 将上面的函数用一行代码完成 6 print(a(2,5)) 所有匿名函数的名字都是 lambda 可以赋值其他变量名 ,可以自己认为其他变量名是 函数名 查看函数名: 上面函数名查看 print(func.__name__) print(a.__name__) #用来查看函数名 func <lambda> lambda函数可以返回多个值 a = lambda a,b : (a,b) print(a(2,3)) 结果 (2, 3) 返回多个值接收,必须要用元组 返回的是元组 sorted() 排序函数 语法: sorted(iterable,key, reverse) key 排序规则 运行流程: 把可迭代对象中的每一个元素交给后面key函数来执行,得到一个数字(权重),通过这个数字进行排序  1 lis = [1,34,3,5,2,6,8,32,45,65,76] 2 a = sorted(lis) # 内置函数提供了一个通用的排序方案 ,sorted() 3 print(a) 4 5 结果 6 [1, 2, 3, 5, 6, 8, 32, 34, 45,

剑指offer 求1+2+3+...+n

我是研究僧i 提交于 2020-02-05 17:07:30
1.题目 求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 来源:剑指offer 链接: https://www.nowcoder.com/practice/7a0da8fc483247ff8800059e12d7caf1?tpId=13&tqId=11200&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 2.我的题解 首先乘法的公式不能用; 递归时结束判断不能用 if ; 2.1 递归解法 递归求解; 短路原理代替递归结束的 if 判断; 时间复杂度: O(n) ; class Solution { public : int Sum_Solution ( int n ) { int sum = n ; bool flag = n && ( sum + = Sum_Solution ( n - 1 ) ) ; return sum ; } } ; 3.别人的题解 3.1 二进制乘法 参照十进制乘法:分位乘,再相加; 任一个乘数为零则需要退出递归; 时间复杂度: O(logn) ; class Solution { long long int mask [ 2 ] = { 0x00 ,

第二章--查找与排序

China☆狼群 提交于 2020-02-05 15:03:18
递归 找重复(重复子问题,问题的规模要越来越小) 找变化(递归的核心是参数的变化) 找边界(程序的出口) 递归可以理解为,我自己做一部分工作,剩下的交给下属去做,下属亦如此。 例题1:反转字符串 像这种题就是 切蛋糕思维 ,每次切一刀,使蛋糕越来越小 public class Main { public static String reverse ( String str , int end ) { //end:尾字符下标 if ( end == 0 ) return String . valueOf ( str . charAt ( 0 ) ) ; return str . charAt ( end ) + reverse ( str , end - 1 ) ; } public static void main ( String [ ] args ) { String res = reverse ( "12345" , 4 ) ; System . out . println ( res ) ; } } 例题2:求最大公约数 这种数学题没法用切蛋糕的思维,需要找出 递推公式 。 求 m, n 的最大公约数 如果 m % n = 0,说明 m 是 n 的整数倍,最大公约数就是 n。 如果 m % n = k,k 不为零,则用 n % k , 若 n % k = 0,说明 k

递归倒序输出数字

自古美人都是妖i 提交于 2020-02-05 14:20:59
#include using namespace std; void Reverse_Printf_num(int n) { cout << n % 10; if (n >= 10) Reverse_Printf_num(n / 10); } int main() { int n = 0; cin >> n; Reverse_Printf_num(n); return 0; } 来源: CSDN 作者: ldbite 链接: https://blog.csdn.net/ldbite/article/details/104180636

非递归全排序(非字典算法)

假装没事ソ 提交于 2020-02-05 13:30:46
非c++ next_permutation方式 数组不可有重复值(等待改进中) 思路: nums = [1,2,3, 4] 先建立空lists 数量为n! = 4! = 24 [ [], [], [], . . . ] sPtr = 0 [1, 2, 3, 4] 3!=6次插入nums[sPtr]后,指针sPtr后移(超出回归0) [ 1 , // sPtr = 0 1 , 1 , 1 , 1 , 1 , 2 , // sPtr = 1 … … … ] [1, 2, 3, 4] 插入前检测nums[sPtr] 是否已存在当前list中,是则指针sPtr后移(超出回归0) 2!=2次插入nums[sPtr]后,指针sPtr后移(超出回归0) [ [ 1 , 2 // sPtr = 1 1 , 2 1 , 3 // sPtr = 2 1 , 3 1 , 4 // sPtr = 3 1 , 4 … // sPtr = 0 … … ] [1, 2, 3, 4] 插入前检测nums[sPtr] 是否已存在当前list中,是则指针sPtr后移(超出回归0) 1!=1次插入nums[sPtr]后,指针sPtr后移(超出回归0) [ 1 , 2 , 3 1 , 2 , 4 1 , 3 , 2 1 , 3 , 4 1 , 4 , 2 1 , 4 , 3 … … … ] [1, 2, 3, 4]

(Java)递归实现汉诺塔

巧了我就是萌 提交于 2020-02-05 09:25:28
标题:递归实现汉诺塔 //题目详细描述 :(前提:第一个柱子上的盘子是按顺序从小到大放置的)将第一个柱子上的所有盘子,先从小盘子开始,最终移动到最后一个盘子上,也是按照顺序,从上到下的盘子是从小到大放置的,一次只能移动一个盘子。(大盘子不能放在小盘子上面 ) //核心思想 :n代表盘子总个数,source原柱子,dest目标柱子 【代码演示:】 public class Hannoi { //三个盘子的标号为0,1,2 public static void move ( int n , int source , int dest ) { if ( n == 1 ) { System . out . printf ( "从 %d 移到 %d%n" , source , dest ) ; return ; } int other = 3 - source - dest ; move ( n - 1 , source , other ) ; System . out . printf ( "从 %d 移到 %d%n" , source , dest ) ; move ( n - 1 , other , dest ) ; } public static void main ( String [ ] args ) { move ( 3 , 0 , 2 ) ; } } 【运行结果:】 来源:

UVA - 1630 Folding 递归记忆化搜索

做~自己de王妃 提交于 2020-02-05 09:07:27
问题 问题就是折叠字符串,例如ACBACB可以折叠成2(ACB),并且折叠可以嵌套,字符串长度是n(1<n<=100),求最短的折叠 分析 状态比较易懂,dp[i][j]代表[i,j]这一段能压缩成的最短字符串 然后分为三种情况决策,1.不能压缩的 2.能部分压缩的(就是分开后再压缩) 3.整体能压缩的 # include <iostream> # include <cstdio> # include <cmath> # include <cstring> # include <string> # include <algorithm> using namespace std ; const int maxn = 105 ; //int slen[maxn][maxn]; string dp [ maxn ] [ maxn ] , str ; //计算重复的最小长度 int fold ( const string & s ) { int len = s . length ( ) ; for ( int i = 1 ; i * 2 <= len ; ++ i ) { if ( len % i ) continue ; bool isFold = true ; for ( int j = 0 ; j < len - i ; ++ j ) { if ( s [ j ] != s [ j