Pascal的三角形代码在某一行之后失败

时间:2016-02-16 22:12:19

标签: java recursion pascals-triangle

import java.util.*;
public class PascalFinal
{
public static void main() 
{
    Scanner f = new Scanner(System.in);
    System.out.print("How many rows of Pascal's triangle do you want to print: ");
    int row = f.nextInt();
    Pascal(row);

    showPascal(Pascal(row));
}

public static void showPascal(int[][] Pascal)
{
    for(int a = 0; a < Pascal.length; a++)
    {
        for(int b = 0; b < Pascal[a].length; b++)
        {
            System.out.print(Pascal[a][b] + " ");
        }
        System.out.println();
    }
}

public static int[][] Pascal(int x)
{
    int[][] Pascal = new int[x][];
    int rowLength = 1;
    for(int a = 0; a < x; a++)
    {
        Pascal[a] = new int[rowLength];
        rowLength++;
    }



    for(int a = 0; a < Pascal.length; a++)
    {
        for(int b = 0; b < Pascal[a].length; b++)
        {
            int Piscal = a-b;

            Pascal[a][b] = Factorial(a)/Factorial(b)/Factorial(Piscal);
        }
    }

    return Pascal;
}

public static int Factorial(int n)
{

    if (n < 0) 
    {
        int x = -1;
        return x;
    }

    if (n == 0) 
    {
        int x = 1;
        return x;
    }
    else 
    {
        return (n * Factorial(n - 1));
    } 
}

当我运行该代码时,它对前13行完全正常,但是它开始为其余行添加奇怪的值。我的第一个问题是它可能是因为从factorial方法得到的值太大而且int数据类型无法容纳它但我不确定。不知道为什么这会搞砸了。请帮忙。

编辑:我尝试使用 long 数据类型而不是int,但是当我超过20行时会出现同样的问题。

1 个答案:

答案 0 :(得分:1)

如果您必须绘制的Pascal三角形是设计为here的三角形 你不需要评估任何因子。

每一行都可以使用前一行用简单的总和进行评估......

您可以使用数组来完成。作为建议,从arrary开始:[0,1,0] 并记住,可以使用前一行的相邻数字的总和来评估下一行。

你需要循环[0,1,0]并创建[0,1,1,0]然后再创建[0,1,2,1,0]

如您所见,第一个是0并且始终为0,下一个是前两个的总和,依此类推......