c - 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
我找不到问题,所以如果有人可以帮助我,我会很高兴和感激。
解决方案
如果您不太关心计算时间,那么您可以直接从它们的递归定义中计算系数。
int pascal(int x,int y) {
if (x==0 || y==0) return 1;
return pascal(x-1,y)+pascal(x,y-1);}
推荐阅读
- sql - SQL找不到变量?
- xslt - XSL-FO Region-Body 背景图片
- mail-server - 希望创建刻录机帐户
- python - 使用多个 csv 文件作为 CNN 的测试和训练集
- visual-studio - 是在不同的层中复制多个项目文件,还是在创建 Docker 映像时一次性复制更好?
- javascript - 如何在数字输入字段中添加逗号以获取多个重新编码
- swift - 从集合视图重新加载数据时的多个视图
- azure-sql-database - Azure SQL 高级数据安全 (ADS) 和安全中心定价
- leakcanary - 了解 LeakCanary 内存泄漏堆栈跟踪
- c++ - 如何使用new创建指向结构的指针数组?