生成pascal三角形的最佳方法(提到两种方式)

时间:2011-08-02 06:17:06

标签: java arrays combinations pascals-triangle

我在Java中有一个编程任务。

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

但是,该赋值要求创建一个不均匀的二维数组,然后通过添加前一行中的两个数字然后将数组打印出来来填充。

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

哪种方法更好?

3 个答案:

答案 0 :(得分:1)

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

然而,赋值的方法需要为三角形的每个元素添加一个。

答案 1 :(得分:1)

如果我理解你的问题,你试图比较两种生成Pascal三角形的方法:

  1. 通过运行nCr函数来填充三角形的每个单元格。
  2. 通过简单添加填充每个单元格,一次生成三角形。
  3. 第二种方法看起来更好。我错过了什么吗?即使您在nCr函数中使用了memoization,这些调用也会产生开销。

答案 2 :(得分: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;
        }
    }
}