我试图只使用递归打印一个具有升序和降序的直角三角形。
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);
}