`
kangzhengfei
  • 浏览: 2449 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

关于递归的一个问题

SQL 
阅读更多
今天写代码的时候,想要得到某个部件下的所有子件的id组合,对应的model是PlanProdInfo,其实就是一个树,产品,部件,子件都在其中存着,parentId为其父件的id.起初代码是这样写的
/**
 * @see 得到某部件下的所有子件id组合
 */
private void getAllChild(String partId, String allChild){
		String sql="select prod.id from PlanProdInfo prod where prod.parentId="+partId;
		List tempList=generalObjectService.findBySql(sql);
		if (tempList != null && tempList.size() > 0) {
			Long id = null ;
			for(int i=0;i<tempList.size();i++){
				id=(Long)tempList.get(i);
				allChild+=id+"," ;
				getAllChild(id.toString(),allChild);
			}
		}
	}

allChild是对象,不是容器,最后还是为空,想后用集合list,修改下是这样:
/**
 * @see 得到某部件下的所有子件id组合
 */
private void getAllChild(String partId, List temp){
		String sql="select prod.id from PlanProdInfo prod where prod.parentId="+partId;
		List tempList=generalObjectService.findBySql(sql);
		if (tempList != null && tempList.size() > 0) {
			Long id = null ;
            String idStr = "" ;
			for(int i=0;i<tempList.size();i++){
				id=(Long)tempList.get(i);
                if(temp != null && temp.size() > 0 && temp.get(0) != null){
					idStr = (String) temp.get(0) ;
				}
                temp.clear();
                temp.add(idStr) ;
                getAllChild(id.toString(),temp);
			}
		}
	}

但是在递归里面在判断list,感觉效率很低,所以,最后直接把所有的id存放在list中,然后循环list,重新组装id,代码如下:
/**
 * @see 得到某部件下的所有子件id组合
 * @param String partId, List temp
 */
private void getAllChild(String partId, List temp){
		String sql="select prod.id from PlanProdInfo prod where prod.parentId="+partId;
		List tempList=generalObjectService.findBySql(sql);
		if (tempList != null && tempList.size() > 0) {
			Long id = null ;
			for(int i=0;i<tempList.size();i++){
				id=(Long)tempList.get(i);
				temp.add(id+",") ;
				getAllChild(id.toString(),temp);
			}
		}
	}

但是感觉这样效率也是很低,请各位指教啊!
分享到:
评论
2 楼 kangzhengfei 2009-01-06  
谢谢.
1 楼 阳光晒晒 2009-01-06  
select name,level
from t_test
connect by prior name = parent
start with name='爷爷'
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    递归法解决迷宫问题

    此代码展示了一种用递归解决迷宫问题的方法,可以自行输入迷宫即得到解答

    递归和非递归解决迷宫问题

    (1)以链栈作为存储结构,编写一个求解迷宫的非递归程序,并将求得的通路以三元组(i,j,d)的形式输出,其中: i,j指示迷宫中的一个坐标,d表示走到下一坐标的方向; (2)编写递归形式的算法,求得迷宫中所有可能...

    java 递归问题文档

    4. **终止条件**:每种递归问题都需要一个明确的终止条件,否则会导致无限递归,程序将无法停止。 5. **问题分解**:递归通常用于将大问题分解为更小的子问题。例如,计算阶乘可以用递归表示为`n! = n * (n-1)!`,...

    C语言迷宫问题递归和非递归求解

    总的来说,C语言中的迷宫问题提供了一个实践数据结构和算法的好机会,无论选择递归还是非递归方法,都需要深入理解搜索策略和数据结构的运用。通过解决这类问题,可以提升编程思维和问题解决能力。

    汉诺塔问题的非递归算法

    非递归算法解决了这个问题,提供了一个不同于传统递归解决方案的方法。对于n个圆盘的情况,非递归算法的核心在于通过交替执行两个步骤来移动圆盘: 1. **步骤1**:根据圆盘数量的奇偶性,按顺时针方向将圆盘1从当前...

    一个关于递归的小问题

    x=fib(n-1)+fib(n-2);

    背包问题递归算法C语言

    **背包问题递归算法在...总之,背包问题递归算法在C语言中的实现是一个很好的学习实例,它展示了如何利用递归来解决复杂问题。虽然效率不如动态规划,但递归算法对于理解问题的本质和构建解决方案有着重要的教学价值。

    Python基于递归算法实现的走迷宫问题

    本文通过一个具体的迷宫问题实例,介绍了如何利用Python的递归算法来解决问题。递归算法是一种强大的工具,能够帮助我们高效地处理复杂的数据结构和算法问题。在实际应用中,合理地使用递归算法可以极大地简化代码,...

    C#递归 C#递归 C#递归

    递归是一种编程技术,它允许一个方法或函数直接或间接地调用自身。递归通常用于解决可以通过重复相同过程分解成更小问题的问题。递归方法包含两个主要部分: 1. **基本情况**(Base Case):这是递归结束的条件。 2....

    递归替换_递归替换_递归替换问题_

    递归替换问题的主要目标是创建一个程序,该程序能够遍历C/C++源文件,找到所有的`#include`指令,并将它们指向的文件内容实际插入到包含文件的位置。这涉及到文件读取、字符串处理以及递归调用,因为被包含的文件...

    非递归法实现n皇后问题

    本资源是数据结构中利用非递归法实现n皇后问题的一个C++代码,仅供参考,欢迎指正

    Hanoi塔问题的一种非递归算法

    通过构建一个虚拟的满二叉树模型,每个节点代表一次盘子的移动,而非实际创建物理上的二叉树结构,算法得以简化并避免了递归带来的额外开销。 #### 五、算法实现细节 非递归算法的核心在于如何通过模拟二叉树的...

    c++递归实现汉诺塔问题

    这是一个简单的C++代码实现,展示了如何使用递归来解决汉诺塔问题: ```cpp #include using namespace std; void hanoi(int n, char from_rod, char to_rod, char aux_rod) { if (n == 1) { cout ; return; }...

    经典递归问题

    整数划分是递归问题的一个典型例子,它涉及到将一个正整数 i 分割成若干个正整数的和,要求这些整数的和等于 i,并且每个部分不超过某个给定的最大值 j。计算划分的个数可以通过两种情况来递归解决:一是包含 j 作为...

    用递归与非递归求解迷宫问题

    在计算机科学领域,迷宫问题是一个经典的问题,它涉及到图论、搜索算法和路径规划等概念。本实验主要探讨如何用递归与非递归的方法解决这类问题,这对于理解和掌握数据结构,特别是栈和队列的特性至关重要。下面将...

    关于递归的误区

    在计算机科学领域,递归是一种常见的算法设计技巧,其基本思想是将问题分解为更小的子问题,直至达到可以直接解决的基本情况,然后逐步返回求解原问题。递归因其简洁性和直观性而被广泛应用于多种算法实现中,如树的...

    acm递归算法总结竞赛

    在ACM(国际大学生程序设计竞赛)中,递归算法是一种常见的解决问题的方法,它通过函数自身调用自身来实现问题的解决。递归的核心在于找到基本情况(base case),即可以直接求解的问题,以及每次递归调用时问题规模...

    .net 递归算法 .net 递归算法.net 递归算法

    快速排序通过选取一个基准值,将数组分为小于和大于基准值的两部分,然后分别对这两部分进行递归排序。 - **动态规划**:一些优化问题,如斐波那契数列、背包问题、最长公共子序列等,可以通过递归配合记忆化搜索来...

    迷宫问题之递归算法 绝对超值

    在计算机科学领域,迷宫问题是一个经典的问题,它涉及到路径搜索和图遍历。递归算法是解决此类问题的一种高效且优雅的方法。本程序利用递归策略,为解决迷宫问题提供了一种实用的解决方案。 首先,迷宫可以被抽象为...

    链式栈实现递归和非递归迷宫路径求解

    在Java中,可以定义一个递归函数,传入当前节点和之前路径的信息,通过不断调用自身寻找所有可能的路径。 "pers.hr.homework.maze"可能是包含迷宫求解算法实现的Java源代码文件。在这个文件中,我们可能会看到类的...

Global site tag (gtag.js) - Google Analytics