编写一个方法countToBy,它接受整数参数n和m,并产生一个输出,指示如何以逗号分隔的m为增量计数到n。
呼叫countToBy(25,4);印刷品:1,5,9,13,17,21,25
我的印刷品:,5,9,13,17,21,25
我不能只添加System.out.print(“1”);因为并非所有的呼叫都应该在开头打印1。除了第一个元素,代码工作正常。我已经尝试了所有东西以获得第一个元素,但要么我得到“111111”或根本没有。任何帮助,将不胜感激。
注意:这不是练习递归的功课! :)
public static void countToBy(int n, int m) {
if(n < 1 || m < 1) {
throw new IllegalArgumentException();
}
if(n == 0 || m == 0) {
System.out.print("");
}
else {
int store = n - m;
if(store > 0){
countToBy(n - m , m );
System.out.print (", " + n ); // issue is here
}
}
}
答案 0 :(得分:1)
主要问题是您的条件if(store > 0)
会阻止您打印当前值。你应该做的是使用条件继续递归,但总是打印当前值n
,因为如果它到达那一点,它会通过你之前的所有检查,所以它是一个有效的值。
更改
// ... rest of your code
int store = n - m;
if(store > 0){
countToBy(n - m , m );
System.out.print(", " + n );
}
// ...
要:
// ... rest of your code
int store = m - n;
if(store > 0){
countToBy(store, m ); // use store instead of n-m because you already calculated that
System.out.print(", "); // print the comma inside the statement, because (store > 0) means we have more elements to come
}
System.out.print(n); // print the current element
// ...
此外,您的第二个if
声明并非真正用于任何目的,因为如果n
或m
为0,那么它将满足第一个if
并且在没有达到第二个if
的情况下抛出异常。因此,您可以将其删除。
以下是您的代码可缩短的内容(为简洁起见,我省略了if n < 1, m < 1
检查):
public static void countToBy(int n, int m) {
int store = n - m;
if(store > 0) {
countToBy(store, m );
System.out.print(", ");
}
System.out.print(n);
}
答案 1 :(得分:0)
变化:
if(n == 1 || m == 1){
System.out.print(n);
}
要:
n
m
和8 ** 6561
永远不应该&lt;因为这会导致你已经检查过的错误,如果其中一个等于1,只需显示第一个字符。
答案 2 :(得分:0)
void countToBy(int to,int offset) {
if (to == 0 || offset ==0) {
System.out.print(0) ; //base caes
return;
}
if ( to<=offset) {
System.out.print(to) ; //base caes
return;
} else {
countToBy(to-offset,offset); //recursive step
System.out.print (", "+to);
}
}