我在Java中有一个编程任务。
我已经通过制作一个nCr(http://en.wikipedia.org/wiki/Combination)函数来实现它,然后使用double for循环来打印出三角形。
但是,该赋值要求创建一个不均匀的二维数组,然后通过添加前一行中的两个数字然后将数组打印出来来填充。
我知道我将不得不按照它要求的方式完成任务,但是我有一种小感觉(至少对于小三角形而言)我实施的方法更好。
哪种方法更好?
答案 0 :(得分:1)
我认为作业所要求的方法会更好。你的方法需要多次乘法来计算三角形的每个元素。对于需要计算的三角形的每一行,此数字都会增加。
然而,赋值的方法需要为三角形的每个元素添加一个。
答案 1 :(得分:1)
如果我理解你的问题,你试图比较两种生成Pascal三角形的方法:
nCr
函数来填充三角形的每个单元格。第二种方法看起来更好。我错过了什么吗?即使您在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;
}
}
}