我正在嘗試僅使用遞回列印帶有升序和降序數字的直角三角形。
void straightTriangular(int num)
{
if (num == 0)
{
return;
}
straightTriangular(num - 1);
for (int i = 1; i <= num; i )
{
cout << i;
}
cout << endl;
}
我怎樣才能在沒有“for”回圈的情況下使用遞回來做到這一點?
如果用戶輸入數字是 4 那么 我希望輸出是這樣的:
1
121
12321
1234321
我的輸出使用我發布的代碼:
1
12
123
1234
uj5u.com熱心網友回復:
請注意,三角形(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);
}
uj5u.com熱心網友回復:
你可以有:
- 一個
printTriangleRec遞回列印每一行的函式, - 兩個
printAscendingRec和printDescendingRec函式遞回列印每行的兩半。
[演示]
#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 < 1\n";
return;
}
printTriangleRec(1, num);
}
int main()
{
printTriangle(4);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/397883.html
標籤:C
