c++ - 如何使用递归打印修改后的星号三角形图案?
问题描述
我正在使用 C++,我的任务是使用递归来打印具有特定模式的三角形:
例如,如果用户输入整数 4,控制台应输出以下内容: https ://i.stack.imgur.com/Gf46V.jpg
编辑:如果用户输入整数 3,控制台应输出以下内容: https ://i.stack.imgur.com/7Sqxb.jpg 这是我对模式的所有信息。
所以,我认识到每条线上的星星图案是:1、2、1、3、1、2、1、4(最大)、1、2、1、3、1、2、1
但我使用递归得到的最远距离是打印大小为 n 的三角形:
void starprint(int n) {
for (int i = 1; i <= n; ++i)
{
if (i == 1) std::cout << "*" << std::endl;
else
{
for (int j = 1; j <= i; j++)
{
std::cout << "*";
}
std::cout << std::endl;
}
if (i == n)
starprint(n - 1);
}
}
所以现在我被困住了,因为模式有点奇怪,因为我对这些事情的直觉是使用迭代而不是递归,而且我对递归有点菜鸟。
关于如何解决这个问题的任何建议都会非常有帮助。多谢你们!
解决方案
在这里,您可以为这个序列提供一个优雅的递归解决方案:
#include <iostream>
using namespace std;
void printstar(int n){
if(n == 1) {cout<<"1 "; return;}
printstar(n - 1);
cout<<n<<" ";
printstar(n - 1);
}
int main() {
printstar(4);
}
//output: 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1
正如我在评论中所说,方法是认为这n
将成为双方的一面镜子。每边将是另一个孤立的序列,其中间将是n - 1
(将再次充当镜子),依此类推。
1 2 1 3 1 2 1 [4] 1 2 1 3 1 2 1
1 2 1 [3] 1 2 1
1 [2] 1
[1]
推荐阅读
- matplotlib - osmnx plot_graph 以像素为单位截断绘图大小
- pytorch - 在pytorch中模仿keras时间分布层的正确方法是什么?
- python - 在python中向嵌套字典添加键和值的语法是什么?
- java - spring tools 3(standalone) 3.9.14 版本发布期间出现内部错误:“Loading Spring static imports into Eclipse code assistant favorite
- r - 在 R 中计算 Cronbachs Alpha 的正确数据格式
- r - Tidy R Data:搜索特定字符串和数字的因子以根据该值复制行
- python - mysql.connector.connect() 在数据库工具使用相同设置工作时拒绝访问?
- python - 如何比较列包含的值不是数字?
- javascript - 在 Angualr 站点中使用 OktaAuth 时不起作用
- javascript - 如何设置限制点击次数按钮可以使用cookies按下