zoukankan      html  css  js  c++  java
  • 算法(第4版)-1.1 提高题(部分)

    1.1.27

    public class Ex_1_1_27b
    {
        public static double binomial(int n, int k, double p, Counter c)
        {
            double[][] v = new double[n+1][k+1];
            for (int i = 0; i <= n; i++)
                for (int j = 0; j <= k; j++)
                    v[i][j] = -1;
            
            return binomial(v, n, k, p, c);
        }
        
        public static double binomial(double[][] v, int n, int k, double p, Counter c)
        {
            if (n == 0 && k == 0) return 1.0;
            if (n < 0 || k < 0) return 0.0;
            
            if (v[n][k] == -1)
            {
                c.increment();
                v[n][k] = (1.0 - p) * binomial(v, n-1, k, p, c) + p * binomial(v, n-1, k-1, p, c);
            }
            
            return v[n][k];
        }
        
        public static void main(String[] args)
        {
            int n = Integer.parseInt(args[0]),
                k = Integer.parseInt(args[1]);
            double p = Double.parseDouble(args[2]);
            
            Counter c = new Counter("calls");
            
            double b = binomial(n, k, p, c);
            
            StdOut.println(b);
            StdOut.println(c);
            // java Ex_1_1_27b   10    5 0.5:        50 calls
            // java Ex_1_1_27b   20   10 0.5:       175 calls
            // java Ex_1_1_27b   30   15 0.5:       375 calls
            // java Ex_1_1_27b  100   50 0.5:     3,875 calls
            // java Ex_1_1_27b 1000  500 0.5:   376,250 calls
            // java Ex_1_1_27b 4000 2000 0.5: 6,005,000 calls
        }
    }

    总结:

    递归函数中,当返回值为两个或两个以上、可能多次返回的函数调用时,更好的实现如下:

    1.创建递归函数入口a,在a中声明数组,并为数组中的每一位赋值,该值不能等于递归函数的基本情况;

    2.创建递归函数b,通过a将数组作为参数传进b。先判断是否基本情况,如果是则直接返回值;再判断对应数组中的值是否已被修改,如果没被修改,则相应的值等于递归函数b的调用,然后返回相应的值。

  • 相关阅读:
    javascript获得浏览器工作区域的大小
    javascript禁止输入数字
    Extjs之遍历Store内的数据
    Extjs之rowEditing编辑状态时列不对齐
    Extjs中numberfield小数位数设置
    【转】vscode常用快捷键整理
    【转】如何提高WEB的性能?
    【转】echarts 使用示例
    uni-app页面配置和跳转
    【转】.NetCore如何将特性和依赖注入有效结合
  • 原文地址:https://www.cnblogs.com/iguure/p/5978678.html
Copyright © 2011-2022 走看看