重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1、递归做为一种算法在程序设计语言中广泛使用,是指函数/过程/子程序在运行过程中直接或间接调用自身而产生的重入现象。
创新互联-专业网站定制、快速模板网站建设、高性价比卢氏网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式卢氏网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖卢氏地区。费用合理售后完善,十载实体公司更值得信赖。
2、递归算法一般用于解决三类问题:
1)数据的定义是按递归定义的。(Fibonacci(斐波那契)的函数)
2)问题解法按递归算法实现。(回溯)
3)数据的结构形式是按递归定义的。(树的遍历,图的搜索)
代码如下:
import java.util.ArrayList;
import java.util.List;
class Org {
private String id;
private String name;
private String pid;
public Org(String id, String name, String pid) {
this.id = id;
this.name = name;
this.pid = pid;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
@Override
public String toString() {
return "Org [id=" + id + ", name=" + name + ", pid=" + pid + "]";
}
}
public class App {
static void find(ListOrg list, String pid) {
list.stream().filter(p - p.getPid().equals(pid))
.forEach(org - {
System.out.println(org);
find(list, org.getId());
});
}
public static void main(String[] args) {
ListOrg list = new ArrayList();
list.add(new Org("111", "公司", "0"));
list.add(new Org("222", "部门", "111"));
list.add(new Org("333", "小组", "222"));
list.add(new Org("444", "员工1", "333"));
list.add(new Org("555", "员工2", "333"));
find(list, "0");
System.out.println("------------------------------------");
find(list, "111");
}
}
运行结果:
使用递归计算5的阶乘,递归代码的书写得找出原问题两个显著的特点,1.上一层与下一层之间的关系,或者公式。2.跳出递归的条件。
阶乘:0!=1,1!=1,2!=1!*2,3!=2!*3,4!=4*3!,5!=5*4!。由这6个式子我们可知,求5的阶乘,得求4的阶乘,求4的阶乘必须先求3的阶乘,以此类推。故,什么时候才能停止往下(继续往下找呢),我们只0!=1,这就是跳出递归的条件,这是固定的。上下层之间的关系,5!=4!*5,假设n=5,那么用未知数可表示n!=(n-1)!*n。具体代码如下。
public
class
Test
{
public
static
void
main(String[]
args)
{
int
num=fac(5);
System.out.println(num);
}
public
static
int
fac(int
n){
if(n==1){//跳出递归的条件:0!=1
return
1;
}else{
int
num=n*fac(n-1);//上下层的关系:n!=(n-1)!*n
return
num;
}
}