`
wsql
  • 浏览: 12098532 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

递归用函数、存储过程实现的效果

 
阅读更多

--測試

<!-- [endif]-->

create table ta ( 项目 varchar ( 20), 上级项目 varchar ( 20), num int )

insert ta

select 'A' , '' , 100 union all

select 'B' , 'A' , 200 union all

select 'C' , 'B' , 300 union all

select 'D' , 'B' , 400 union all

select 'E' , 'C' , 500 union all

select 'F' , 'D' , 600 union all

select 'H' , 'E' , 700 union all

select 'G' , 'F' , 800

-- 如果要显示上级的项目 :

create function roy_f( @ 项目 varchar ( 20))

returns varchar ( 100)

as

begin

declare @ 上级项目 varchar ( 20)

select @ 上级项目 = 上级项目 from ta where 项目 = @ 项目

return case when @ 上级项目 is null then null

else isnull ( dbo. roy_f( @ 上级项目 )+ '-' , '' )+ @ 项目 end

end

-- 如果显示各级项目的汇总金额 :

create function roy_f2( @ 项目 varchar ( 20))

returns int

as

begin

declare @tb table ( 项目 varchar ( 20), 上级项目 varchar ( 20), num int , lev int )

declare @i int , @sum int

set @i= 0

insert @tb select *, @i from ta where 项目 = @ 项目

while @@rowcount > 0

begin

set @i= @i+ 1

insert @tb

select a.*, @i

from ta a, @tb b

where b. 项目 = a. 上级项目 and b. lev= @i- 1

end

select @sum= sum ( num) from @tb

return @sum

end

-- 测试 :

select 项目 , 金额 = dbo. roy_f2( 项目 ), 关系 = dbo. roy_f( 项目 ) from ta

/*

项目 金额 关系

-------------------- ----------- ---------------

A 3600 A

B 3500 A-B

C 1500 A-B-C

D 1800 A-B-D

E 1200 A-B-C-E

F 1400 A-B-D-F

H 700 A-B-C-E-H

G 800 A-B-D-F-G

(所影响的行数为 8 行)

*/

-- 用存储过程统计 :

create proc roy_p @ 项目 varchar ( 20)

as

begin

declare @i int

set @i= 0

select *, 级数 = @i into #

from ta where 项目 = @ 项目

while @@rowcount > 0

begin

set @i= @i+ 1

insert #

select ta.*, 级数 = @i

from ta, # b

where ta. 上级项目 = b. 项目

and b. 级数 = @i- 1

end

select [sum]= sum ( num) from #

end

-- 测试 :

exec roy_p 'A'

/*

sum

-----------

3600

(所影响的行数为 1 行)

*/

-- 删除测试 :

drop function roy_f, roy_f2

drop proc roy_p

drop table ta

分享到:
评论

相关推荐

    ackermann函数的递归实现和非递归实现

    非递归实现的基本思想是将递归调用转化为循环,并使用数据结构(如堆栈)存储中间结果,避免了递归带来的调用栈溢出问题。 非递归实现的步骤大致如下: 1. 初始化一个堆栈,用于保存待处理的阿克曼函数参数对`(m, ...

    MyBatis之自查询使用递归实现 N级联动效果(两种实现方式)

    在本文中,我们将介绍两种实现 N级联动效果的方式:使用递归函数和使用数组。 第一种方式:使用递归函数 在第一种方式中,我们可以使用递归函数来实现 N级联动效果。递归函数是一种特殊的函数,它可以调用自身以便...

    阿克曼函数 c程序 递归与非递归算法的综合

    同时,这也为理解递归函数的优化提供了很好的实例,这对于任何计算机科学的学习者来说都是非常宝贵的经验。在实际编程中,理解和掌握如何有效地处理递归问题,尤其是在资源有限的情况下,是至关重要的技能。

    数据结构:栈的应用-递归函数转非递归函数

    为了解决这些问题,我们可以使用非递归函数,借助栈来实现。 非递归版本的阶乘函数可以使用循环和栈来实现。栈在这里的作用是存储待处理的数值。首先将初始值n压入栈中,然后进入循环,每次从栈顶取出一个元素,...

    三元Ackerman函数的非递归实现

    在这个非递归实现中,我们使用堆栈来存储待计算的 Ackerman 函数参数对 (m, n)。首先,将初始参数对压入堆栈,然后进入一个循环,直到堆栈为空。在循环中,我们取出堆栈顶部的参数对,根据 Ackerman 函数的定义进行...

    递归函数 递归排序法

    本篇将深入探讨递归函数的概念,递归排序法,以及如何在C语言中实现它们。 首先,我们要理解什么是递归函数。递归函数是指函数在执行过程中调用自身,每次调用都会产生一个新的子问题,直到子问题足够简单,可以...

    ackerman函数

    Ackerman函数,也被称为阿克曼函数,是一个非常特殊的数学函数,主要在计算理论和递归函数理论中被研究。这个函数是由美国数学家Maurice Karnaugh在1937年提出的,但以他的老师Gottfried Ackermann的名字命名。它是...

    Python语言基础:递归函数.pptx

    在编程领域,递归函数是一种基于函数自我调用来解决问题的策略。在Python中,递归函数的定义简单,逻辑清晰,使得复杂问题的解决变得直观。递归函数的关键在于每个递归调用都必须向基本情况靠近,即最终会达到一个不...

    函数递归调用堆栈分析.doc

    我们将使用递归函数来实现这个过程,并分析函数递归调用堆栈的过程。 首先,我们需要了解递归函数的工作原理。递归函数是一种特殊的函数,它可以调用自身,以便解决问题。在函数递归调用过程中,每次调用函数时,...

    计算递归函数调用次数

    在编程领域,递归函数是一种强大的工具,它通过自身调用来解决复杂问题。递归的基本原理是将大问题分解为相同或相似的小问题,并通过解决这些小问题来达到解决整个问题的目的。本主题关注的是如何计算递归函数的调用...

    嵌入式C语言培训-C编程基础-递归函数视频教程

    在C语言中,实现递归函数需要注意以下几点: 1. **堆栈管理**:每次函数调用都会在内存堆栈中分配空间保存局部变量和返回地址。递归函数调用会持续占用这些资源,因此深度过大的递归可能导致堆栈溢出,这是使用递归...

    指针+函数递归的应用(C语言学习)

    在这个过程中,我们使用了指针来访问数组中的元素,并使用函数递归来实现数字的移动。函数`move`是一个递归函数,它将数组中的元素移动到指定的位置。该函数使用指针来访问数组中的元素,并使用递归调用自己来实现...

    java_DWR递归函数实现城市的省市县三级联动

    在这个场景中,"java_DWR递归函数实现城市的省市县三级联动" 提供了一个利用DWR处理多级联动选择的实例,特别适用于中国的行政区域划分,包括省、市、县三级。这种功能常见于地址选择、物流配送等业务场景。 首先,...

    源代码_用递归方法编写函数_

    在编程领域,递归是一种强大的工具,用于解决复杂问题,特别是处理树形结构或具有重复子...通过适当优化,如使用记忆化,可以提高递归函数的效率。在实际应用中,理解和掌握递归方法对于解决问题和设计算法至关重要。

    MySQL实现递归查询的三种方式.rar

    例如,如果我们有一个员工树结构,每个员工可能有下属,我们可以通过递归函数来获取整个组织结构。 ```sql CREATE FUNCTION get_subordinates(emp_id INT) RETURNS TEXT BEGIN DECLARE result TEXT; -- 递归逻辑 ...

    递归调用详解,分析递归调用的详细过程[参考].pdf

    递归调用是软件开发中一个重要的概念,它是函数实现的一个很重要的环节,许多程序中都或多或少的使用了递归函数。递归的意思就是函数自己调用自己本身,或者在自己函数调用的下级函数中调用自己。递归之所以能实现,...

    递归实现字符串反向输出

    4. **递归函数实现**: ```c void printn(char str[N], int m) { if (m == 1) printf("%c", str[0]); else { printf("%c", str[m - 1]); printn(str, m - 1); } } ``` `printn`函数是递归的核心,它接收...

    插入、查找和删除函数用非递归的方式实现

    这个过程可以用while循环实现,无需递归。 **查找函数** 查找函数用于在数据结构中寻找特定元素。非递归实现通常依赖于迭代,效率较高。 1. **线性查找**: 对于数组或链表,从头到尾逐个检查元素,直到找到目标或...

    使用函数递归实现的计算器(四则运算)

    解析阶段,我们需要设计一个递归函数来处理表达式的不同部分。这可能涉及到以下步骤: 1. **读取输入**:从用户处获取数学表达式。 2. **预处理**:去除空格,处理括号,确保表达式的格式正确。 3. **分词**:将...

Global site tag (gtag.js) - Google Analytics