为什么这个Pascal三角实现给了我尾随的零
Why is this Pascal Triangle implementation giving me trailing zeroes?
我尝试递归地实现它(迭代看起来不那么优雅,但如果我错了,请纠正我(。但输出似乎给了我尾随的零,前几行是出乎意料的。我已经检查了基本情况和递归情况,但它们似乎都很好。这个问题肯定在功能范围内。
#include <iostream>
unsigned long long p[1005][1005];
void pascal(int n)
{
if (n == 1)
{
p[0][0] = 1;
return;
}
else if (n == 2)
{
p[0][0] = 1; p[0][1] = 1;
return;
}
p[n][0] = 1;
p[n][n-1] = 1;
pascal(n-1);
for (int i = 1; i < n;++i)
{
p[n][i] = p[n-1][i-1] + p[n-1][i];
}
return;
}
int main()
{
int n;
std::cin >> n;
pascal(n);
for (int i = 0 ; i < n ; ++i)
{
for (int j = 0 ;j < i+1 ; ++j)
{
std::cout << p[i][j] << " ";
}
std::cout << "n";
}
}
输出:(我输入(15
1
0 0
0 0 0
1 0 0 0
1 1 0 0 0
1 2 1 0 0 0
1 3 3 1 0 0 0
1 4 6 4 1 0 0 0
1 5 10 10 5 1 0 0 0
1 6 15 20 15 6 1 0 0 0
1 7 21 35 35 21 7 1 0 0 0
1 8 28 56 70 56 28 8 1 0 0 0
1 9 36 84 126 126 84 36 9 1 0 0 0
1 10 45 120 210 252 210 120 45 10 1 0 0 0
1 11 55 165 330 462 462 330 165 55 11 1 0 0 0
基本情况n = 1
和n = 2
过于激进(对于像10这样的正常输入,永远不会达到1,因为2过早地中断了递归,在数组中留下了未被触及的零(。n
的这些值应该由递归情况自动覆盖。我们什么都不做的真正的基本情况是当n < 0
。
void pascal(int n)
{
if (n < 0) return;
p[n][0] = 1;
pascal(n - 1);
for (int i = 1; i <= n; ++i)
{
p[n][i] = p[n-1][i-1] + p[n-1][i];
}
}
n = 15
:的输出
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1
1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1
话虽如此,对数组的大小进行硬编码是一种糟糕的做法。考虑使用向量并将参数传递给函数,这样它们就不会改变全局状态。
我们也可以用一种更直观的方式迭代地写它:
void pascal(int n)
{
for (int i = 0; i < n; ++i)
{
p[i][0] = 1;
for (int j = 1; j <= i; ++j)
{
p[i][j] = p[i-1][j-1] + p[i-1][j];
}
}
}
相关文章:
- C++读取用户输入而不按回车键(Mac OS X),与Turbo Pascal中的读取键相同
- C 回调函数在对象 pascal 上崩溃
- 三角化元组
- 为什么这个Pascal三角实现给了我尾随的零
- CGAL-三角网格,返回面对面映射
- 如何访问CGAL三维三角测量中的面
- CGAL 3D 周期性德劳内三角测量与信息的问题
- Fixed_alpha_shape_3() 会破坏或修改原始三角测量吗?
- C 是否具有对两个STD :: sets,vectors等进行三角比较的标准方法
- 编译和运行 CGAL 三角测量演示
- 如何计算三角数生成的运行时复杂度
- 来自Pascal DLL/SO中的C 加载和调用功能
- 在1个功能中打印相反的三角递归C
- 三角位置的颜色
- CGAL没有计算完整的德劳内三角测量
- 如何将三角孔贴片转换为曲面网格
- 优化德劳奈三角测量算法
- C++ 和 pascal 字符串之间的区别
- 是否有在 c++ 中使用三角分布生成随机数的函数
- pascal三角计算,无需/while循环