递归:后面的项可以由前面的项推导出来,前提是前面项有初始条件,否则会无限递推下去。如:n>0;f(1)=1;f(2)=2;f(n)=f(n-1)+f(n-2);
public class Recursion01 { public int f(int n) { if (n == 1 || n == 2) { return 1; } else { return f(n - 1) + f(n - 2); } } public static void main(String[] args) { Recursion01 re = new Recursion01(); int result = re.f(6); System.out.println(result); } }
这个是Java中实现的递推例子。当n>2时,会不断条用f(n)这个方法,直到达到f(1),f(2);然后重新将值赋给调用它们的对象,直到f(n-1)+f(n-2);
在遍历树的结构时也是用递推方式获取树中的元素:
/** * 使用递归方式解析XML文件 * 实现思路:根据根节点,遍历根节点,若根节点的子节点还有子节点,就接着遍历该节点, */ public class ParseXml01 { User user = new User(); //递归遍历xml文档,获取里面的元素 public void parseElement02(Element rootElement) { Element element; //使用迭代器遍历根节点 for (Iterator iterator = rootElement.elementIterator(); iterator.hasNext(); ) { //获取根子节下面的节点 element = (Element) iterator.next(); //打印节点的名字和文本 //System.out.println("当前节点:" + element.getName() + ",文本:" +element.getTextTrim()); //将文件中的用户信息提取出来 if (element.getName().equals("User")) { if (element.getName() != null && element.getName() != "") { user.setName(element.getTextTrim()); } } if (element.getName().equals("Password")) { if (element.getName() != null && element.getName() != "") { user.setPassword(element.getTextTrim()); } } //判断当前节点是否存在子节点,存在的话就继续遍历 //得到节点类型,为1代表有子节点 if (element.getNodeType() == Node.ELEMENT_NODE) { if (element.hasContent()) { parseElement02(element); } } } } //解析 public void parseXmlMethod(File file) throws Exception { //创建SAXReader解析对象 SAXReader reader = new SAXReader(); //根据SAXReader对象创建Document对象 Document document = reader.read(file); //document对象得到根节点 Element eleRoot = document.getRootElement(); //打印root信息 System.out.println("根元素:" + eleRoot.getName() + ",属性:"); //调用递归方法进行解析节点信息 parseElement02(eleRoot); } //打印用户信息 public void userInfo() throws Exception { //调用解析方法,解析文件,输出文件中的用户信息 parseXmlMethod(new File("E://lazyli/test02.xml")); System.out.println("用户名:" + user.getName() + ",密码:" + user.getPassword()); } public static void main(String[] args) throws Exception { ParseXml01 parseXml01 = new ParseXml01(); parseXml01.userInfo(); } }
浙公网安备 33010602011771号