我已经获得了一个赋值输出如下:with in recursion。
****
***
**
*
**
***
****
我的问题是我不能使用任何循环,必须使用printStars(行)的一个递归参数严格编译代码。
这是我的代码:
public static void printStars(int lines) {
if (lines==1) { //base case
System.out.print("*");
}else if (lines>1){ //recursive case
printStars(lines-1);
System.out.print("*");
但是,输出只是打印:
Please enter a number: 4
****BUILD SUCCESSFUL (total time: 2 seconds)
我可以使用for循环完美地工作,但是,这个循环的限制我需要只在递归中工作。我已经阅读了将for循环更改为递归的方法,但我仍然感到困惑。任何帮助或想法?
谢谢,
答案 0 :(得分:0)
在当前代码中,您调用printStars(4)。调用它时,代码递归调用printStars(3),printStars(2),然后调用printStars(1)。
第一个*来自printStars(1)。当返回时,第二个*在递归调用后由printStars(2)打印。第三个*在递归调用后打印在printStars(3)中,第四个*在printStars(4)中递归调用后打印。
考虑问题,并查看您要查找的输出的形状。模式是4,3,2,1,2,3,4,初始输入为4.这看起来像你需要遵循这样的模式:
public static void printStars(int lines) {
if (lines ==1) {
System.out.print("*");
}
else {
// Do something before recursion
// Recurse
// Do something after recursion
}
}
对于您的输出,您应该看到这种情况发生:
**** //printed when lines==4
*** //printed when lines==3
** //printed when lines==2
* //printed when lines==1
** //printed when lines==2
*** //printed when lines==3
**** //printed when lines==4