迭归和迭代是我们在写算法时经常用到的,以下是对迭归几种精典用法的总结:
一,用迭归计算如求1+2+3+...n累加的和
static int demo(int n) {
if (n == 1){
return 1;
}
else{
return n + demo(n - 1);
}
}
二,用迭归遍历如对树形结构的数据遍历
比方说有一数据结构:Category : id,name,pid
将多个Category 放在集合里面,要求找出遍历的父子
String res = "";//对扫描的操作
public String tree(Collection co, int pid) {
Iterator it = co.iterator();
while (it.hasNext()) {
Category ct = it.next();
if (ct.pid == pid) {
int id = ct.id;
// res+=Integer.valueOf(id)+",";
res = ct.name + "的id=" + id + " 其pid=" + pid;
System.out.println(res);
tree(co, id);
}
}
return res;
}
public String tree(Collection co, Category cg) {
Iterator it = co.iterator();
while (it.hasNext()) {
Category ct = it.next();
if (ct.pid == cg.id) {
int id = ct.id;
// res+=Integer.valueOf(id)+",";
res = ct.name + "的id=" + id + " 其pid=" + ct.pid;
System.out.println(res);
// System.out.println(ct);
tree(co, ct);
}
}
return res;
}
public String tree1(List co, Category cg) {
for (int i = 0; i < co.size(); i++) {
Category ct = (Category) co.get(i);
if (ct.pid == cg.id) {
int id = ct.id;
// res+=Integer.valueOf(id)+",";
res = ct.name + "的id=" + id + " 其pid=" + ct.pid;
// System.out.println(res);
System.out.println(ct);
tree(co, ct);
}
}
return res;
}
二,用迭归遍历如对子节点和父节点有共同接口结构的数据遍历
跟java中的设计模式之Composite(组合)很像
Composite定义:
将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性.
形如:
public class GenericTreeNode implements TreeNode {
private TreeNode parent = null;
private List> children = new ArrayList>();
public boolean isLeaf() {
return getChildCount() == 0;
}
public boolean isRoot() {
return getParent() == null;
}
。。。
}
方法一:
public void recursiveTravel(GenericTreeNode node) {
System.out.println(node);
//travelNode(node); // 访问节点,迭归扫描的实作操作
List> children = node.getChildren();
for (int i = 0; i < children.size(); i++) {
recursiveTravel(children.get(i)); // 递归地访问当前节点的所有子节点。
}
}
分享到:
相关推荐
C 语言算法归纳 本文档对 C 语言中常用的算法进行了归纳和总结,涵盖了递归法、判断素数、求闰年、求 N 的阶乘、求 m 和 n 的最大公约数和最小公倍数、大小写字母转换、求 3 个数由小到大的顺序输出、求 ax*x+b*x+c...
"Dhua C语言算法归纳"很可能是对C语言中各种常见算法的整理和总结,旨在帮助学习者更好地理解和掌握这些算法。这里,我们将深入探讨C语言中的核心算法知识。 一、排序算法 1. 冒泡排序:一种简单的排序方法,通过...
C语言常用算法归纳.pdf
本压缩包文件包含了对计算机图形学算法的归纳和说明,旨在帮助学习者理解和掌握这一领域的核心概念。 1. **基本画图算法** - 直线绘制:Bresenham算法是最常用的一种离散化直线绘制方法,适用于像素级别的画图。它...
CN2规则学习算法是一种经典的归纳算法,主要用于从样本中自动学习产生式规则。产生式规则是形如“如果……则……”的语句,被广泛应用于专家系统和知识获取中,以帮助机器执行复杂的决策过程。 在人工智能和机器...
### 递归算法及归纳法知识点详解 #### 一、递归算法简介 递归算法是一种重要的编程技术,它在计算机科学中占有举足轻重的地位。递归算法的概念最早由约翰·麦卡锡(John McCarthy)教授提出,他曾在麻省理工学院...
C语言归纳算法,翻硬币,奇偶数 有N个硬币(N为偶数)正面朝上排成一排,每次将N-1个硬币翻过来放在原位置,不断地重复上述过程,直到最后全部硬币翻成反面朝上为止。设计程序让计算机把翻币的最简过程以及翻币次数...
JAVA算法[归纳].pdf
KMP算法[归纳].pdf
SQP算法[归纳].pdf
《ACM所有算法总结》,很不错的ACM方面资料,详实全面细致明了,希望对有需要的朋友提供到帮助,值得拥有。
模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+代码实现)模型算法大全(20+种常用算法模型+...
《算法合集之《数学归纳法与解题之道》1》这篇文章主要探讨了数学归纳法在算法设计和问题解决中的重要性,特别是它在信息学竞赛中的应用。数学归纳法是一种强大的证明工具,用于验证一个命题对所有自然数都成立。...
《易语言之算法研究(6)_归纳法》是关于编程领域的一个专题,主要探讨了如何在易语言中应用归纳法来解决算法问题。易语言是中国自主研发的一种编程语言,旨在简化编程过程,使得初学者也能快速上手。在这个专题中,...
归纳法原理
C语言快速排序算法[归纳].pdf
Java算法全卷涵盖了基本算法和图算法,是学习和提升编程技能的重要资源。这份资料主要针对使用Java语言进行算法实现的开发者,适用于那些对ANT、EJB、J2EE、JAVA和SPRING等技术栈有了解或兴趣的人群。下面我们将深入...
《易语言源码:易语言之算法研究(6)_归纳法》 易语言,作为一款中国本土化的编程语言,以其直观、简洁的语法设计深受初学者喜爱。在易语言的算法研究领域,归纳法是一种重要的思维方式,它在解决数学问题和编程问题...
对Dijstra算法与A*算法进行了比较