I'm trying to solve this problem but in stuck in converting my while loop into recursion
我设法实现了printMany函数,如下所示
public static void printMany(int count, String s){
if(count >= 1) {
System.out.print(s);
printMany(count-1, s);
}
}
但是沙漏方法的当前实现仍然使用循环,但它显示正确的输出 .
public static void hourglass(int numberOfStars, int numberOfSpaces){
while(numberOfStars>0){
printMany(numberOfSpaces++, " ");
printMany(numberOfStars--, "X ");
System.out.println();
}
numberOfSpaces -=2;;
numberOfStars += 2;
while(numberOfSpaces>=0){
printMany(numberOfSpaces--, " ");
printMany(numberOfStars++, "X ");
System.out.println();
}
}
我想问一下,如何将此循环转换为递归调用?
5 回答
这是给你的一段代码 . 使用对称填充 .
而不是循环你的程序,你调用相同的功能 .
只需将该方法拆分为两个,这是您的问题的另一个递归解决方案:
例如,运行沙漏(3,1);会给你以下:
这是一种可能的解决方案:
在例如中调用
hourglass(1);
main
结果:所以
hourglass(2);
打印:等等...
我不只是给你答案,但我会尽力帮助你 . 如果你想使用递归和没有循环来解决这个问题,那么关键在于弄清楚递归辅助函数的参数必须是什么 . 看起来你总是需要记住原始用户输入(知道要打印多少空格并知道何时停止递归),你当前的星数,以及你是否在顶部金字塔的一半或下半部分 . 鉴于所有这些信息,您应该能够做两件事 . 首先,您应该能够正确地打印出一条线 . 其次,您应该能够确定下一行应该是什么 . 鉴于此,您可以打印并递归,一旦达到基本案例就停止 .