• 穷举算法和递推算法(Java)


    穷举算法

    概念:

    最简单算法,依赖计算机的强大计算能力穷尽每一种可能的情况。穷举算法效率不高,但是适合一些没有明显规律可循的场合。

    思想:

    在使用穷举算法时,需要明确问题答案的范围,这样才可能在指定范围搜索答案。指定范围之后,就可以使用循环和条件判断语句进行逐步验证结果了。

    案例:鸡兔同笼问题

    在一个笼子里关着若干只鸡和若干兔子。一共有35个头,和94只脚。问在一个笼子里鸡和兔子各有多少个。

     

    package cmd.chengxuyuanzhilu.arithmetic;
    
    import java.util.Scanner;
    
    /**
     * @author 微信公众号:程序员之路 
     *                 博客:http://www.cnblogs.com/chengxuyuanzhilu/
     * 穷举算法
     */
    public class Exhaustion {
        public static void exhaustion(int head,int foot){
            int chicken,rabbit;
            for(chicken=0;chicken<= head;chicken++){
                rabbit=head-chicken;
                if(chicken*2+rabbit*4 == foot){
                    System.out.println(String.format("鸡有 %d只,兔子有%d只", chicken,rabbit));
                }
            }
        }
        @SuppressWarnings("resource")
        public static void main(String[] args) {
            int head,foot;
            
            System.out.println("穷举算法解决鸡兔同笼问题");
            System.out.println("输入头的个数");
            Scanner scanner = new Scanner(System.in);
            head = scanner.nextInt();
            System.out.println("输入腿的个数");
            foot = scanner.nextInt();
            exhaustion(head, foot);
        }
    }

    递推算法

    概念:

    递推算法在数学计算等方面广泛应用。递推算法适合有着明显规律的场合

    思想:

    递推算法往往需要用户知道答案和问题之间的逻辑关系。在许多数学问题中,都有着明显的计算公式可以遵循,因此可以采用递推算法。

    案例:兔子产崽子的问题

    如果有两个月大的兔子以后每个月都可以产一对小兔子,而一对小兔子出生两个月后可以在生小兔子,也就是1月份出生,3月份才可以产崽子。那么假定一年内没有发生死亡事件,那么现在有一对小兔子一年后共有多少对兔子。

    案例分析:

    11对兔子

    21对兔子

    32对兔子 一对成熟兔子

    43对兔子

    55对兔子 两对成熟兔子

    68对兔子 三对成熟兔子

    。。。。。。

    规律:前两个月都是一对兔子,以后每个月的兔子的对数是前两个月的总和

    1,2月份的计算公式:n月  Fn = (Fn-1)+(Fn-2)

     

    package cmd.chengxuyuanzhilu.arithmetic;
    
    import java.util.Scanner;
    
    /**
     * @author 微信公众号:程序员之路 
     *                 博客:http://www.cnblogs.com/chengxuyuanzhilu/
     * 递推算法
     */
    public class Recurrence {
        public static int recurrence(int months){
            if( months == 1 || months == 2){
                return 1;
            }else{
                int m1 = recurrence(months-1);
                int m2 = recurrence(months-2);
                return m1+m2;
            }
        }
        
        @SuppressWarnings("resource")
        public static void main(String[] args) {
            int months,rabbits;
            
            System.out.println("递推算法解决兔子生崽子的问题");
            System.out.println("输入月数");
            Scanner scanner = new Scanner(System.in);
            months = scanner.nextInt();
            rabbits = recurrence(months);
            System.out.println(String.format("%d月共有兔子%d对", months,rabbits));
        }
    }
  • 相关阅读:
    将jar打包成exe
    CXF + Spring 开发 Webservices
    关于highstock横坐标的一些的一些说明(1)使用UTC时间
    JAX-WS + Spring Integration Example
    EMA指标和MACD指标的JAVA语言实现
    MACD详细计算方法及例子
    notepad 不换行的问题
    eclipse 编码设置(转)
    如何理解作用域
    js中new一个对象的过程
  • 原文地址:https://www.cnblogs.com/chengxuyuanzhilu/p/6408836.html
Copyright © 2020-2023  润新知