java 递归小程序

wangsufu77 2019-01-09 11:30:50

```

```package sf1;


import java.util.ArrayList;


public class Reursion {
public static void main(String[] args) {
java.util.List<Person> list=new ArrayList<>();
Person p1=new Person("B","A");
Person p2=new Person("C","B");
Person p3=new Person("D","C");
Person p4=new Person("A",null);
list.add(p1);
list.add(p2);
list.add(p3);
list.add(p4);
Person p= findPerson(list,p3);
System.out.println(p.getSelfId());
}

private static Person findPerson(java.util.List<Person> list, Person p) {
if(p.getRefId()==null){
return p;

}
for(int i=0;i<list.size();i++){

if(p.getRefId().equals(list.get(i).getSelfId())){

findPerson(list, list.get(i));
}

}
return p;
}




}

class Person{
private String selfId;
private String refId;


public Person(String selfId, String refId) {
super();
this.selfId = selfId;
this.refId = refId;
}
public Person() {
super();
// TODO Auto-generated constructor stub
}
public String getSelfId() {
return selfId;
}
public void setSelfId(String selfId) {
this.selfId = selfId;
}
public String getRefId() {
return refId;
}
public void setRefId(String refId) {
this.refId = refId;
}

}
问题,已经找到跟节点P4,代码为什么还继续往下执行for循环呢?
...全文
335 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
过分着迷 2019-01-15
  • 打赏
  • 举报
回复
递归的话简单学习一下就好,不用怎么深度挖掘,递归效率是非常低的
二班的码农 2019-01-12
  • 打赏
  • 举报
回复
从逻辑上看,你是希望findPerson可以找到指定结点的根结点,对根结点的定义是,结点的第二个值在整个结点list的第一个值找不到。 把for循环改一下 for(int i=0;i<list.size();i++){ if(p.getRefId().equals(list.get(i).getSelfId())){ return findPerson(list, list.get(i)); } 整个findPerson解释如下: // 返回p结点在list中的根结点 private static Person findPerson(java.util.List<Person> list, Person p) { // 结点第二个值是null,此结点是根结点 if (p.getRefId() == null) { return p; } for(int i=0; i<list.size(); i++) { if(p.getRefId().equals(list.get(i).getSelfId())) { // 已找到下一个结点,下一个结点的根结点,就是此结点的根结点,所以要返回 return findPerson(list, list.get(i)); } } // 结点第二个值不为null,但在list里所有结点的第一值找不到 return p; }
RohsZ 2019-01-09
  • 打赏
  • 举报
回复
你都没有设置递归边界
水很深 2019-01-09
  • 打赏
  • 举报
回复
你for循环写的,就是把集合所有对象都对比查找一遍的,无论是否已经提前找到

62,630

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧