public class Main
{
public static void pyr(int n)
{
for(int i=1;i<=n;i++)
{
for(int j = 1;j<=i;j++)
{
System.out.print("*");
}
System.out.println();
}
}
}
可以递归地实现像星号形状这样的金字塔代码吗?如果是这样的话,尤其是2个循环,第一个用于调平,而第二个用于填充每个级别。
答案 0 :(得分:2)
答案是肯定的 - 基本上所有迭代都可以递归完成,有时候更容易,但更耗时。
对于你的问题 - 这就是诀窍:
public static void main(String[] args)
{
printPyramid(7);
}
public static void printPyramid(int lines)
{
if (lines > 1)
{
printPyramid(lines-1);
}
printLine(lines);
System.out.println("");
}
public static void printLine(int level)
{
if (level > 0)
{
System.out.print("*");
printLine(level-1);
}
}
答案 1 :(得分:1)
“任何可以评估的函数 计算机可以用术语表达 没有使用的递归函数 迭代,继续传递 样式;相反,任何递归 功能可以表达为 迭代“。 资源: http://kevin.vanzonneveld.net/techblog/tag/recursion/
编辑:添加了源链接。
答案 2 :(得分:0)
当然,请看一下wikipedia article的章节。我也见过数学证明,但我忘记了在哪里可以找到它。
在您的情况下,只需使用两种方法。只要输入参数大于0,就会打印星号。
public void static printStar(int n) {
if(n > 0) {
System.out.print("*");
--n;
printStar(n);
}
}
此代码处理您的内部循环。
public void static printPyramid(int n, int start) {
if(start >= n) {
return;
}
printStar(start);
++start;
printPyramid(n, start);
}
此代码处理您的外部循环。哪个开始是你的。