• 递归算法


    递归算法解决问题的特点:
    (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


    如果有来生,要做一片树叶。 春天恋上枝,炎夏恋上水。 深秋恋上土,东来化作泥。 润物细无声,生生世世恋红尘。
  • 相关阅读:
    交通部道路运输车辆卫星定位系统部标JTT808、809、796标准大全
    linux下如何源码编译安装vim
    Ubuntu如何重新启动tftp服务
    Ubuntu如何自定义tftp服务根目录
    git如何撤销git add操作?
    如何使两台主机间的不同网段互通?
    debian下如何源码安装tmux
    mysql插入数据自动生成主键uuid
    mysql的 UUID的生成方式
    MySQL SQL语句 生成32位 UUID
  • 原文地址:https://www.cnblogs.com/shujiying/p/4777865.html
Copyright © 2020-2023  润新知