首页 > 解决方案 > c中的帕斯卡三角形没有数组

问题描述

我尝试编写一个程序,该程序将在不使用数组的情况下给出帕斯卡三角形,并牢记帕斯卡三角形的每个元素都可以计算为 n 选择 k" 并写成这样的公式: n 选择 k = n!/ k! (nk)! (对于从 0 开始的 n 和 k)

所以我还必须定义阶乘函数,它适用于前 14 行。但在第 15 行及更多行中,我的数字开始减少并变为负数,但我不明白为什么会发生这种情况。

这是代码

#include <stdio.h>
int factorial(int a);

int main()
{
    int row, j, i, space, tot;
    scanf("%d", &row);
    space=row;
    for(i=0; i<row; i++)
    {
        for(space=0; space<row-i; space++)
        {   printf("   ");    }

        for (j = 0; j <= i; j++)
        {
            if (j == 0 || i == 0)
            {   tot=1;  }
            else
            {   
                int n=factorial(i);
                int k=factorial(j);
                int z=factorial(i-j);
                tot= n/(k*z);
            }
            printf("%6d", tot);
        }
        printf("\n");
    }
}

int factorial(int a)
{
    int fact=1;
    for (int m=1; m<=a; m++)
        {   fact*=m;    }
    return fact;
}

这是我在第 15 行的输出: 1 0 1 5 14 29 44 50 44 29 14 5 1 0 1

但实际输出应该是这样的: 1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1

我找不到问题,所以如果有人可以帮助我,我会很高兴和感激。

标签: c

解决方案


如果您不太关心计算时间,那么您可以直接从它们的递归定义中计算系数。

int pascal(int x,int y) {
   if (x==0 || y==0) return 1;
   return pascal(x-1,y)+pascal(x,y-1);}

推荐阅读