首页 > 编程知识 正文

java中的递归方法,java递归算法经典实例

时间:2023-05-05 03:21:08 阅读:153366 作者:2663

c允许称为递归(recursion )的函数调用其本身。

最简单的递归类型是将递归调用语句放在函数的末尾,即紧接在return语句之前。 这种格式称为尾部递归或尾部递归,因为递归调用出现在函数的末尾。 这是最简单的递归格式,因为递归的作用相当于循环语句。

递归必须包括可以结束递归调用的语句。

递归是为一些编程问题提供最简单的方法,但一些递归算法具有很快就会耗尽计算机内存资源的缺点。 此外,使用递归程序会使读取和维护变得困难

如果询问专家,确实是“末尾递归”的情况,也就是说函数体中使用的变量不需要堆栈保存,gcc

-O2可以优化并展开到循环中,但递归函数中存在分支(例如实现路径遍历)是不行的。 如果有分支,就必须保存条件变量,需要堆栈,此时不能展开

开车。 在实际编码中大部分都是这种情况。

/*

列出包含子目录内容的指定目录下的文件或文件夹。

这意味着列出指定目录下的所有内容。

目录中还有目录,所以使用列出目录功能的同一函数就可以了。

在一览显示中还显示目录的情况下,也可以再次调用本功能。

也就是说,函数本身就是调用自己。

这种表示或编程方法称为递归。

递归注意:

1、限定条件。

2、注意递归的次数。 尽量避免内存溢出。

*/

importjava.io.*;

classFileDemo3

{

publicstaticvoidmain (string [ ] args ) )。

{

filedir=new file (d : ((testdir ) );

//showdir(dir,0 );

//tobin(6);

//intn=getsum(8000;

//system.out.println('n='n );

system.out.println(dir.delete );

}

公共字符串级别(int level ) )。

{

stringbuilder sb=new stringbuilder (;

sb.append((|--);

for(intx=0; x

{

//sb.append(|--);

sb.insert(0,'|';

}

returnsb.toString (;

}

publicstaticvoidshowdir (filedir,intlevel ) )。

{

system.out.println(getlevel ) dir.getName );

标签;

File[]files=dir.listFiles (;

for(intx=0; x

{

files [ x ].is directory ()

showdir(files[x],level );

else

system.out.println(getlevel ) files[x];

}

}

公共统计信息(intn ) )。

{

if(n==1) )。

返回1;

Returnngetsum(n-1;

}

公共声明(intnum ) )。

{

是if (数字0 )

{

tobin(num/2;

system.out.println(num%2);

}

}

//未结束的递归,变成了循环

publicstaticvoidmethod (

{

method (;

}

}

部门递归工具类

packagecn.itcast.oa.util;

importjava.util.ArrayList;

importjava.util.Collection;

importjava.util.List;

import cn.itcast.OA.domain.department;

publicclassDepartmentUtils{

//*

*遍历部门树,遍历所有部门并放回同一集合中,其中所有部门的名称已更改为表示层次结构。

*

*@paramtopList所有顶级部门都将parent==null作为种子

*@return

*/

publicstaticlistgetalldepartments (list toplist ) {

Listlist=newArrayList (;

walkdepartmenttreelist () toplist、()、list;

返回列表;

}

//*

*遍历部门树,并将已遍历的部门信息放置到指定集合中

*

*@paramtopList

*/

privatestaticvoidwalkdepartmenttreelist (collection toplist,Stringprefix,Listlist ) {

部署顶级:拓扑列表{

//顶点

Departmentcopy=newDepartment (; //使用复印。 因为原始对象位于会话中

copy.setid(top.getid ) );

copy.setname(prefixtop.getname ) );

list.add(copy; //将副本添加到同一集合

//子树

wlkdepartmenttreelist (top.get children )、' ' prefix、list ); //使用全角空格

}

}

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。