zoukankan      html  css  js  c++  java
  • 递归算法

    递归算法解决问题的特点:
    (1) 递归就是在过程或函数里调用自身。
    (2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
    (3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。
    (4) 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。

    例1:一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少。

    /*
     * @(#)Recrusion.java
     *
     * Copyright 2015Vision, Inc. All rights reserved.
     */

    package test;

    /**
     * description
     *
     * @author zhangkaishun
     * @version 1.0,2015-9-2
     */
    public class Recrusion {

        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            System.out.println(Fool(4));
        }
        public static int Fool(int i) {
            if (i <= 0)
                return 0;
            else if (i > 0 && i <= 2)
                return 1;
            else
                return Fool(i - 1) + Fool(i - 2);
        }
    }

    用递归算法求某一个数的阶乘

    /*
     * @(#)Recrusion1.java
     *
     * Copyright 2015Vision, Inc. All rights reserved.
     */

    package test;

    /**
     * 求某一个数的阶乘
     *
     * @author zhangkaishun
     * @version 1.0,2015-9-2
     */
    public class Recrusion1 {

        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            System.out.println(multiply(5));
        }
        public static int multiply(int t) {
            if (t == 1)
                return 1;
            else
                return t * multiply(t - 1);
        }
    }
    结果为:120

    java递归全排列问题

    这只是一步

    /*
     * @(#)Recrusion3.java
     *
     * Copyright 2015Vision, Inc. All rights reserved.
     */

    package test;

    /**
     * description
     *
     * @author zhangkaishun
     * @version 1.0,2015-9-2
     */
    public class Recrusion3 {

        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            permute("abcd");
        }

        public static void permute(String str) {
            char[] strArray = str.toCharArray();
            permute(strArray, 0, strArray.length - 1);
        }

        public static void permute(char[] list, int low, int high) {
            int i;
            if (low == high) {
                String cout = "";
                for (i = 0; i <= high; i++) {
                    cout += list[i];
                }
                    System.out.println(cout);
                
            } else {
                for (i = low; i <= high; i++) {
                    char temp = list[low];
                    list[low] = list[i];
                    list[i] = temp;
                    permute(list, low + 1, high);
                    temp = list[low];
                    list[low] = list[i];
                    list[i] = temp;
                }
            }
        }
    }
    结果:abcd
    abdc
    acbd
    acdb
    adcb
    adbc
    bacd
    badc
    bcad
    bcda
    bdca
    bdac
    cbad
    cbda
    cabd
    cadb
    cdab
    cdba
    dbca
    dbac
    dcba
    dcab
    dacb
    dabc


    如果有来生,要做一片树叶。 春天恋上枝,炎夏恋上水。 深秋恋上土,东来化作泥。 润物细无声,生生世世恋红尘。
  • 相关阅读:
    MVC4 Action 两种异步方式
    MVC4 Model ValueProvider
    MVC4 Model ControllerDescriptor
    MVC4 基于 Unity Ioc 框架的 ControllerFactory
    MVC4 路由解析 同名Controller的解决方案
    ASP.NET mvc4 Controllder 同步还是异步
    Asp.net MVC 自定义路由
    Xml读取
    Leetcode 1029. 可被 5 整除的二进制前缀
    Leetcode 1014. 在 D 天内送达包裹的能力
  • 原文地址:https://www.cnblogs.com/shujiying/p/4777865.html
Copyright © 2011-2022 走看看