java - 使用递归的引脚金字塔
问题描述
我想使用递归(无循环)打印一个引脚金字塔。我的代码几乎完成了,但我的金字塔是颠倒的,而且没有格式化。我该如何解决。下面是我的源代码:
public void pinPattern(int count) {
if(count == 1)
System.out.println("*");
else {
System.out.print("*");
pinPattern(count - 1);
}
}
public int numberOfPins(int n) {
if(n == 0)
return 0;
else {
pinPattern(n);
return n + numberOfPins(n - 1);
}
}
public static void main(String[] args) {
Recursion x = new Recursion();
System.out.println("The number of pin: " + x.numberOfPins(5));
}
提前致谢。
解决方案
所以这里有两个考虑。首先,需要让金字塔走向另一个方向。如果它是颠倒打印的,那么不要倒计时(从最大值到最小值),而是反转方法。就像是:
public static int pinPatternUp(int numPins, int maxPins)
{
if (numPins <= maxPins) {
// this will add spaces
spaces(maxPins - numPins);
pins(numPins);
return numPins + (pinPattern(numPins + 1, maxPins));
}
return 0;
}
该pins
方法的逻辑(在 OP 的代码中是 'pinPattern ) in the OP's approach is essentially fine for either direction. However, making this change (so that there is a space after each
*`)将允许更好的格式化。
System.out.print("* ");
第二个问题是格式问题。在这种情况下,我们可以将金字塔视为在第一个输出之前需要N个空格。通过一些调查,似乎给定的行将具有总行数 - 就空格而言的当前行。使用递归,可以执行以下操作:
public static void spaces(int num)
{
if (num == 0) {
return;
}
System.out.print(" ");
spaces(num - 1);
}
请注意,现在可以有一个“向上”或“向下”的金字塔,具体取决于pinPattern
是增加还是减少。
注意:由于一些编辑,方法名称与 OP 不完全一致。
public static void main(String[] args)
{
pinPatternUp(1, 5);
pinPatternDown(5, 5);
}
运行向上然后向下运行时的输出:
*
* *
* * *
* * * *
* * * * *
* * * * *
* * * *
* * *
* *
*
推荐阅读
- reactjs - 映射组件时如何动态创建 state、functions 和 onChanges 用作 props?
- python - SQLAlchemy - 在 WTForms QuerySelectField 中获取所选选项的 ID
- symfony - Codeception:如何在 Symfony 模块中存根返回函数
- windows - 如何在 x64 上挂钩 Windows 10 内核驱动程序功能?
- php - 下载 PDF 时参数太少而无法运行
- elasticsearch - 如何以时间戳获取 Elasticsearch 查询结果时间
- azure - 如何为虚拟机输出生成的 adminPassword?
- javascript - 反应本机参考子失败错误
- c# - 未授权用户的 Blazor 登录页面
- python - python pandas数据框不输出