具有递归数字C++的直角三角形模式



我试图只使用递归打印一个具有升序和降序的直角三角形。

void straightTriangular(int num)
{
if (num == 0)
{
return;
}
straightTriangular(num - 1);
for (int i = 1; i <= num; i++)
{
cout << i;
}
cout << endl;
}

我怎么能在没有"递归"的情况下用递归来做到这一点;对于";环

如果用户输入的数字是4,那么我希望输出如下:

1
121
12321
1234321

我的输出使用我发布的代码:

1
12
123
1234

注意,三角形(n(的顶部有一个三角形(n-1(。它在上面有自相似的结构

还要注意,一个看起来像x...n...x的层是x (x+1)...n...(x+1) x,它内部有自相似的结构

void layer(int x, int n) {
std::cout << x;
if (x >= n) return;
layer(x + 1, n);
std::cout << x;
}
void triangle(int n) {
if (n <= 0) return;
triangle(n - 1);
layer(1, n);
std::cout << std::endl;
}

如果要渲染每个层居中的棱锥体,而不是直角三角形,那么层上方出现的不仅仅是一个简单的三角形,而是一个缩进的三角形。你必须跟踪这个缩进。

layer函数保持不变,但首先根据当前棱锥体的缩进级别打印出一些space

#include <iostream>
void space(int n) {
if (n <= 0) return;
std::cout << ' ';
space(n-1);
}
void layer(int x, int n) {
std::cout << x;
if (x >= n) return;
layer(x + 1, n);
std::cout << x;
}
void pyramid(int n, int indent) {
if (n <= 0) return;
pyramid(n - 1, indent + 1);
space(indent);
layer(1, n);
std::cout << std::endl;
}
int main() {
pyramid(4, 0);
}

您可以拥有:

  • 一个CCD_ 5函数,它递归地打印每一行
  • 两个CCD_ 6和CCD_

【演示】

#include <iostream>  // cout
void printAscendingRec(int cur, int top)
{
std::cout << cur;
if (cur != top)
{
printAscendingRec(cur + 1, top);
}
}
void printDescendingRec(int cur)
{
if (cur)
{
std::cout << cur;
printDescendingRec(cur - 1);
}
}
void printTriangleRec(int cur, int top)
{
printAscendingRec(1, cur);
printDescendingRec(cur - 1);
std::cout << "n";
if (cur != top)
{
printTriangleRec(cur + 1, top);
}
}
void printTriangle(int num)
{
if (num < 1)
{
std::cout << "Error: num < 1n";
return;
}
printTriangleRec(1, num);
}
int main()
{
printTriangle(4);
}

最新更新