【发布时间】:2018-10-12 10:23:50
【问题描述】:
我正在尝试编写一个程序,给定一个自然数 n,打印出可以找到 here 的模式。到目前为止,它只适用于 n = 2。 我认为我最大的问题是识别递归函数何时应该调用自身。 代码:
void print_line(int n) { // draw a line with n asterisks
if (n == 0) return;
for (int i = n; i > 0; i--) {
cout << "*";
}
cout << endl;
}
void print_bars(int n) { // draw the pattern
if (n == 0) return;
print_line(n);
print_bars(n - 1);
for (int i = n - 1; i > 0; i--) {
print_bars(i);
}
}
比起直截了当的答案,我更喜欢提示。谢谢。
【问题讨论】:
-
似乎最后一个
for循环过多。 -
因为这应该是一个学习练习,我不想放弃太多。您确定最终条件是您的问题吗?你的输出是什么,它怎么错了? @Banzay,不是针对上述问题,而是有些多余。
-
提示:在打印
**之后打印*,*,在***之后打印****,@98765433@31@@987653433@32 -
不那么神秘:在第 n 个 line 之后打印 (n-1)th pattern 两次
-
与正确性无关:
std::string(n, '*')是n个'*'的字符串,你可以用std::cout << std::string(n, '*') << std::endl;替换所有print_line