这是问题要求
编写一个接受整数参数n的方法writeNums,并按顺序打印前1个以1开头的整数,用逗号分隔。例如,以下调用产生以下输出:
呼叫输出 writeNums(5); 1,2,3,4,5
这是一个解决方案(部分是我的工作,部分是我在线搜索)。我不知道为什么这行writeNums(n - 1);向后打印数字?这有点令人困惑,因为我期待打印出来: 5,4,3,2,1
public class WriteNums
{
public static void main(String args[])
{
WriteNums wn=new WriteNums();
wn.writeNums(5);
}
public static void writeNums(int n) {
if (n == 1)
System.out.print("1");
else {
System.out.println(n);
writeNums(n - 1);
System.out.print(", " + n);
}
}
}
答案 0 :(得分:2)
因为你正在使用递归,你打印的输出是在函数调用之后。
在函数调用之前进行,你将获得5,4,3,2,1
像这样:public static void writeNums(int n) {
if (n == 1)
System.out.print("1");
else {
System.out.print(n+", ");
writeNums(n - 1);
//System.out.print(", " + n);
}
}
答案 1 :(得分:1)
您的程序会产生以下输出:
5
4
3
2
1, 2, 3, 4, 5
为什么这样做?
5
4
3
2
1
来自System.out.println(n);
行。您正在调用writeNums(5)
,然后调用writeNums(4)
,调用writeNums(3)
等。每次调用都会在新行上打n
,然后再进行另一次递归调用。
此部分:, 2, 3, 4, 5
在递归调用完成后由行System.out.print(", " + n);
打印。因此writeNums(2)
会在致电, 2
之后打印writeNums(1)
,writeNums(3)
会在致电, 3
之后打印writeNums(2)
等。
如果您希望程序打印1, 2, 3, 4, 5
,只需删除System.out.println(n);
行。
答案 2 :(得分:0)
程序正在向后打印数字,因为您要求它向后打印数字。看到递归调用的第一次迭代,首先打印n
,然后从n-1
开始。如果要按升序打印数字,请将方法更改为以下内容:
public static void writeNums(int m, int n) {
if(n < 1) return;
System.out.print(m);
if(m == n) return;
writeNums(m+1, n);
}
然后从您的main方法中,将函数调用为writeNums(1, <n>);
答案 3 :(得分:0)
这些数字是向后打印的,因为你在打印数字之前调用相同的方法,它会自行运行直到遇到“if(n == 0)”,在那种情况下,它会自行完成并且能够继续执行下一行 “是System.out.print(”, “+ N)”。所以,这样打印所有序列。
public static void writeNums(int n) {
if (n == 0){
throw new IllegalArgumentException();
}
else if (n == 1) {
System.out.print(n);
} else {
writeNums(n-1);
System.out.print(", " + n);
}
}