下面是一个递归调用,注意
arguments.callee()方法
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
<s:layout>
<s:BasicLayout/>
</s:layout>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.events.TreeEvent;
private function handleItemClose(evt:TreeEvent):void
{
tree1.expandChildrenOf(evt.item, false);
}
private function init():void {
this.tree1.addEventListener(TreeEvent.ITEM_CLOSE, handleItemClose);
}
private function getAllChildLabel():void
{
if(tree1.selectedItem) {
var allChild:Array = [];
var xml:XML = tree1.selectedItem as XML;
this.getAllChild(allChild, xml);
this.textArea1.text = allChild.join("\n");
}
}
private function getAllChild(allChild:Array, xml:XML):void
{
allChild.push(xml.@label);
if(xml.children().length()>0) {
for each(var node:XML in xml.children())
arguments.callee(allChild,node);
}
}
private function getAllParentLabel():void
{
if(tree1.selectedItem) {
var allParent:Array = [];
var xml:XML = tree1.selectedItem as XML;
this.getAllParent(allParent, xml);
this.textArea1.text = allParent.join("\n");
}
}
private function getAllParent(allParent:Array, xml:XML):void
{
allParent.push(xml.@label);
if(xml.parent()) {
arguments.callee(allParent, xml.parent());
}
}
]]>
</fx:Script>
<mx:Tree id="tree1" labelField="@label" showRoot="true" width="300" height="300">
<mx:XMLListCollection id="MailBox">
<fx:XMLList>
<folder label="Mail">
<folder label="INBOX"/>
<folder label="Personal Folder">
<Pfolder label="Business" />
<Pfolder label="Demo" />
<Pfolder label="Personal" isBranch="true" />
<Pfolder label="Saved Mail" />
</folder>
<folder label="Sent" />
<folder label="Trash" />
</folder>
</fx:XMLList>
</mx:XMLListCollection>
</mx:Tree>
<mx:Button id="button1" x="201" y="308" label="得到选择节点下的所有子节点label值" click="getAllChildLabel()" />
<mx:Button id="button2" x="201" y="338" label="得到选择节点的所有父节点label值" click="getAllParentLabel()" />
<mx:TextArea id="textArea1" x="317" y="2" width="276" height="298"/>
</s:Application>
另一个例子:
private function recursiveHandler(list:XMLList,currNode:String,templates:XML):XML
{
for each(var j:XML in list)
{
if(currNode==j.derivedFrom)
{
var xmlResult:XML = <{j.alias} label={j.alias}/>;
templates.appendChild(xmlResult);
delete list[j.childIndex()];
arguments.callee(list,j.alias,xmlResult);
}
}
return templates;
}
参考 http://topic.csdn.net/u/20100518/10/20978562-cfa5-4264-89eb-d7a8f59afc09.html
分享到:
相关推荐
在这个“一个简单的递归调用的实例”中,我们将深入探讨递归调用在.NET项目中的应用,特别是如何利用递归来遍历目录树。 递归调用的基本思想是,一个问题的解可以分解为一个或多个与原问题相同但规模更小的子问题。...
递归调用是软件开发中一个重要的概念,它是函数实现的一个很重要的环节,许多程序中都或多或少的使用了递归函数。递归的意思就是函数自己调用自己本身,或者在自己函数调用的下级函数中调用自己。递归之所以能实现,...
在给定的标题“一个递归调用的存储过程”中,我们可以推测这个存储过程利用了递归机制来解决某个问题。 描述中提到的博文链接指向了iteye博客的一个条目,尽管具体内容没有提供,但我们可以假设它会详细解释如何...
一个递归函数通常包含两个主要部分:基本情况(Base Case)和递归情况(Recursive Case)。基本情况是能够直接求解,无需进一步递归的最简单情况。递归情况则是将问题规模减小并调用自身的过程,直到遇到基本情况...
根据给定的信息,我们可以分析出该段代码是一个用于实现32位无符号乘法运算的汇编语言程序。下面将详细解析此程序的功能、结构及其关键实现细节。 ### 程序功能概述 该程序主要实现了两个32位无符号整数的乘法运算...
递归调用是指在执行一个过程或函数时,该过程或函数又在其内部直接或间接地调用自身。这种调用方式可以解决某些复杂问题,如树遍历、分治策略和动态规划等。下面我们将深入探讨VB6.0中递归调用的原理、实现方法、优...
递归调用的关键在于每一次调用都会处理一个规模更小的问题,直到达到基本情况,即只剩一个圆盘时,可以直接将其从起始柱移动到目标柱。然后,函数逐级返回,每次返回都会完成一个更复杂的步骤,最终实现整个问题的...
递归函数的优点是易于描述和理解、证明简单,但是需要注意防止递归调用无终止地进行。 在C语言中,函数的递归调用是教学中的重点和难点。递归函数可以分为直接递归调用和间接递归调用两种。直接递归调用是指函数中...
通过递归算法实现整数逆序是一个简单而有趣的例子,它展示了递归在实际编程中的应用。递归不仅可以使代码更加简洁,而且对于某些特定类型的问题来说,递归往往是最佳解决方案。当然,在实际开发中还需要考虑性能和...
递归树是一种用来展示递归算法执行流程的数据结构,每棵树的节点代表一个函数调用,而子节点则表示该函数调用产生的进一步递归调用。 假设\(T(n)\)表示计算第\(n\)项Fibonacci数所需的递归调用次数,则有: \[ T(n...
在这个例子中,简单的任务是打印当前的数字,相似性任务是打印下一个数字,出口则是当打印到指定的结束数字时停止递归调用。 在编程中实现递归时,一个重要的技术是参数传递。在上述打印数字序列的例子中,通过增加...
直接给出递归调用次数的确切公式是困难的,但可以通过分析递归树结构给出一个近似估计。一个常见的近似上限是O(2^n),这是因为除了基本情况之外,每个Fibonacci数都会触发两次新的递归调用。然而,实际的递归调用...
递归调用是指在一个方法内部直接或者间接地调用自身的过程。递归调用是解决问题的一种有效方式,尤其适用于那些可以通过分解成更小规模相同问题来解决的情况。 #### 二、递归的基本要素 递归包含两个关键部分: 1....
当只有一个盘子时,直接将其从起始柱子移动到目标柱子即可,无需使用中间柱子,这是递归的基本结束条件。 #### 递归分解过程(Recursive Case) 对于n个盘子的情况,首先将n-1个较小的盘子通过中间柱子移动到目标...
以下是一个简单的递归函数示例,用于删除字符串中的特定字符: ```cpp #include #include std::string deleteChar(const std::string& str, char c) { // 基本情况:如果字符串为空或没有待删除字符,直接返回...
3. C语言允许直接递归调用和间接递归调用。函数可以直接调用自身,也可以通过其他函数间接调用自身。 4. C语言中可处理的文件类型包括文本文件和二进制文件。文本文件以字符形式存储数据,而二进制文件以机器可读的...
下面是一个简单的存储过程示例,它遍历`tree_nodes`表并返回以指定ID为根的所有子节点: ```sql DELIMITER // CREATE PROCEDURE GetSubTree(IN rootId INT) BEGIN DECLARE done INT DEFAULT FALSE; DECLARE node...
递归算法的核心在于定义递归终止条件以及递归调用逻辑。 #### 三、ABAP中的递归实现 根据给定的代码片段,我们可以看到ABAP中实现递归的基本结构: ```abap REPORT z_lzj_digui. DATA: all_num TYPE n LENGTH 10....
尾递归是指在递归算法中,递归调用语句只有一个,而且是处在算法的最后。当递归调用返回时,是返回到上一层的调用点,而不是返回到初始调用点。 间接转换法使用栈保存中间结果,将递归调用转换为循环结构。这种方法...