Pascals三角形方法在第14行之后不起作用



我一直在开发一种将Pascal三角形输出为列表的方法。例如:输出PascalsTriangle(4)将返回一个列表,其中包含:CCD_ 2。

问题在于尝试输出PascalsTangle(14(及以上时,因为它不会显示正确的值。

对于第14行,它将给出:1 4 24 88 221 399 532 532 399 221 88 24 4 1,这是错误的。

第14行的正确值为:1 13 78 186 715 1287 1716 1716 1287 715 186 78 13 1

注:第14行之前的所有Pascal三角值都是正确的(据我所知(。

在第14行之后,它继续输出偶数到负数的数字,这是不可能的。

这是代码:

using System;
using System.Collections.Generic;
namespace PascalsTriangle
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter size of triangle: ");
List<int> number = PascalsTriangle(int.Parse(Console.ReadLine()));
number.ForEach(Console.WriteLine);
}
// formula for pascals triangle: n!/k!(n - k)!
// where ! means factorial and 
// where n = row and k = position in row.
public static List<int> PascalsTriangle(int n)
{
List<int> triangle = new List<int>();
int temp = 0;
for (int i = 0; i < n; i++)
{
for (int x = 0; x <= i; x++)
{
if (x == 0 || x == i)
{
triangle.Add(1);
}
else
{
temp = (factorial(i)) / (factorial(x) * factorial(i - x));
triangle.Add(temp);
}
}
}
return triangle;
}
public static int factorial(int number)
{
if (number == 0)
{
return 1;
}
int factorial = number;
while (number > 1)
{
factorial *= --number;
}
return factorial;
}
}
}

问题似乎出在列表中的数字开始变成4位值的地方,也就是代码开始按预期停止工作的时候。

任何帮助都将不胜感激:(

temp的计算溢出。您可以使用更大的数据类型(如longBigInteger(,但是阶乘增长很快,所以使用不同的方法计算temp可能更好。

您正在计算的是二项式系数,请参阅StackOverflow关于如何实现它的答案。然后用它来代替(factorial(i)) / (factorial(x) * factorial(i - x))