4

我有一个 Java 编程任务。

我通过制作一个 nCr ( http://en.wikipedia.org/wiki/Combination ) 函数然后使用双 for 循环通过打印出三角形来实现它。

但是,该分配要求创建一个不均匀的 2d 数组,然后通过添加前几行中的两个数字来填充,然后打印出该数组。

我知道我将不得不按照它要求的方式完成作业,但是我有一种小小的感觉(至少对于小三角形来说)我实施的方法更好。

哪种方法更好?

4

3 回答 3

1

我认为作业要求的方法会更好。您的方法需要多次乘法来计算三角形的每个元素。对于您需要计算的三角形的每一行,这个数字都会增加。

然而,赋值的方法需要对三角形的每个元素进行一次加法。

于 2011-08-02T06:23:06.903 回答
1

如果我理解您的问题,您正在尝试比较两种生成帕斯卡三角形的方法:

  1. 通过运行一个nCr函数来填充三角形的每个单元格。
  2. 通过一个简单的加法填充每个单元格,一次生成三角形。

第二种方法似乎更好。我错过了什么吗?即使您在nCr函数中使用 memoization,这些调用也会产生开销。

于 2011-08-02T06:24:36.047 回答
0
  1. 通过使用递归

    /*By using recursion*/
    class RecursivePascal {
        public static void main(String args[]) {
            int n = 100;
            for (int i = 0; i < n; i++) {
                for (int j = 0; j <= i; j++) {
                    //System.out.print(i+","+j+" ");
                    System.out.print(pascal(i, j) + " ");
                }
                System.out.println();
            }
        }
    
        static int pascal(int i, int j) {
            if (j == 0)
                return 1;
            else if (j == i)
                return 1;
            else {
                return pascal(i - 1, j - 1) + pascal(i - 1, j);
            }
        }
    }
    
  2. 通过使用简单的逻辑

    /*By using logic*/
    class p {
        public static void main(String args[]) {
            int one[] = {1};
            int n = 13;
            System.out.println("1");
            for (int j = 0; j < n; j++) {
                int two[] = new int[one.length + 1];
                int twoCounter = 0;
                for (int i = 0; i < one.length; i++) {
                    if (i == 0) {
                        two[twoCounter++] = one[i];
                        System.out.print(one[i] + " ");
                    }
                    if (i != 0) {
                        two[twoCounter++] = one[i] + one[i - 1];
                        System.out.print((one[i] + one[i - 1]) + " ");
                    }
                    if (i == one.length - 1) {
                        two[twoCounter++] = one[i];
                        System.out.print(one[i] + " ");
                    }
                }
                System.out.println();
                one = two;
            }
        }
    }
    
于 2018-09-17T12:41:17.730 回答