递归:后面的项可以由前面的项推导出来,前提是前面项有初始条件,否则会无限递推下去。如: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();

    }

}

 

posted on 2019-04-28 08:39  lazyli  阅读(188)  评论(0)    收藏  举报