在命令行中取两个数字m和n,并写出一个星号的三角形图案
public class Triangle {
public static void main(String[] args) {
int a=0;
int b=0;
if(args.length!=0){
a=Integer.parseInt(args[0]);
b=Integer.parseInt(args[1]);
}
printFirstHalf(a,b);
printSecondHalf(a,b);
}
public static void printFirstHalf(int m, int n){
if(m==0){
return;
}
//recursive step
for(int i=m; i<=n; i++){
System.out.print("*");
}
System.out.println();
printFirstHalf(m-1,n);
}
public static void printSecondHalf(int m, int n){
if(m==0){
return;
}
printSecondHalf(m-1,n);
//recursive step
for(int i=m; i<=n; i++){
System.out.print("*");
}
System.out.println();
}
}
如果发送3和7,则应打印:
***
****
*****
******
*******
*******
******
*****
****
***
现在打印出来:
*****
******
*******
*******
******
*****
我知道我很接近,但由于某种原因,我受到了严重的困扰。
答案 0 :(得分:0)
考虑一下:
public static void printFirstHalf(int m, int n){
if(m>n){
return;
}
// print asterix
for(int i=1; i<=m; i++){
System.out.print("*");
}
System.out.println();
// recurse
printFirstHalf(m+1,n);
}
你现在看到你的其他方法出了什么问题吗?
如果您是第一次使用递归,我知道它可能很难,但递归没有“魔力”。逐步完成代码并了解它的作用。在这种情况下,您实际上并没有打印所需的星号数。坚持下去。
答案 1 :(得分:0)
你的上半部分可能是这样的(增量逻辑&gt;:
public static void printFirstHalf(int m, int n){
if(m>n){
return;
}
//recursive step
for(int i=1; i<=m; i++){
System.out.print("*");
}
System.out.println();
printFirstHalf(m+1,n);
}
建议你为下半部写下类似的递减逻辑