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


    如果有来生,要做一片树叶。 春天恋上枝,炎夏恋上水。 深秋恋上土,东来化作泥。 润物细无声,生生世世恋红尘。
  • 相关阅读:
    滑动窗口与选择搜索
    R-CNN,SPP-NET, Fast-R-CNN,Faster-R-CNN, YOLO, SSD, R-FCN系列深度学习检测方法梳理
    GD和SGD区别
    AlexNet、VGG、NIN、GoogLeNet、ResNet
    目标检测中的precision,recall,AP,mAP计算详解
    转:图像分类、物体检测、物体分割、实例分割、语义分割
    卷积网络CNN中各种常见卷积过程
    卷积网络中的通道(Channel)和特征图
    人工智能之卷积神经网络(CNN)
    科技文献检索(一)——课程介绍及信息素养
  • 原文地址:https://www.cnblogs.com/shujiying/p/4777865.html
Copyright © 2011-2022 走看看