如何在 Java 中使用递归进行计数?
How do I count up using recursion in Java?
所以,我正在旁听 EdX 上的一门 Java 课程,到目前为止,我一直做得很好。我已经开始递归了,其中一项任务是创建一个方法,该方法计算到指定的数字,在每个数字之间放置逗号(即 System.out.println(writeNum(5)); 应该打印“1, 2, 3, 4, 5, ... n",最后一个数字没有逗号)。
此外,如果传递的值小于 1,则应该会出现 IllegalArgumentException。
我已经用了 2 天的时间,绞尽脑汁,我什至无法理解如何开始。我可以做阶乘:
public static int factorial (int n) {
if(n == 1){
return 1;
}
System.out.println(n);
return n*factorial(n-1);
}
没问题吧?所以,我一直在想,基本情况是什么?是1吗?如果是这样,那么我只是倒数,不知何故需要倒数,重新组织它们,重印它们,然后以某种方式解决问题。或者,我在 n==n 时做我的基本案例,这也不起作用......我知道我可能想得太多了,但我不知道如何开始......如果有人可以通过它和我一起一步步理解这个,我会很感激我这样做,因为我真的很想学习和理解这些东西。
对于递归,您需要找到何时 return 例如在下面给出的代码中,当 n == 1
时,该方法打印 n
和 return 的值。除了终止条件之外,另一个重要方面是在哪里(即在递归调用 method/function 之前还是之后)处理(例如打印)参数。
public class Main {
public static void main(String[] args) {
count(5);
}
static void count(int n) {
if (n == 1) {
System.out.print(n);
return;
}
count(n - 1);
System.out.print("," + n);
}
}
输出:
1,2,3,4,5
这是它的工作原理:
count(5) -> calls count(4) with remaining thing to do is print ,5 once count(4) returns.
count(4) -> calls count(3) with remaining thing to do is print ,4 once count(3) returns.
count(3) -> calls count(2) with remaining thing to do is print ,3 once count(2) returns.
count(2) -> calls count(1) with remaining thing to do is print ,2 once count(1) returns.
count(1) -> prints 1 and returns.
The remaining thing of count(2) is done i.e. ,2 is printed.
The remaining thing of count(3) is done i.e. ,3 is printed.
The remaining thing of count(4) is done i.e. ,4 is printed.
The remaining thing of count(5) is done i.e. ,5 is printed.
检查 this 以了解有关递归的更多信息。
所以,我正在旁听 EdX 上的一门 Java 课程,到目前为止,我一直做得很好。我已经开始递归了,其中一项任务是创建一个方法,该方法计算到指定的数字,在每个数字之间放置逗号(即 System.out.println(writeNum(5)); 应该打印“1, 2, 3, 4, 5, ... n",最后一个数字没有逗号)。
此外,如果传递的值小于 1,则应该会出现 IllegalArgumentException。
我已经用了 2 天的时间,绞尽脑汁,我什至无法理解如何开始。我可以做阶乘:
public static int factorial (int n) {
if(n == 1){
return 1;
}
System.out.println(n);
return n*factorial(n-1);
}
没问题吧?所以,我一直在想,基本情况是什么?是1吗?如果是这样,那么我只是倒数,不知何故需要倒数,重新组织它们,重印它们,然后以某种方式解决问题。或者,我在 n==n 时做我的基本案例,这也不起作用......我知道我可能想得太多了,但我不知道如何开始......如果有人可以通过它和我一起一步步理解这个,我会很感激我这样做,因为我真的很想学习和理解这些东西。
对于递归,您需要找到何时 return 例如在下面给出的代码中,当 n == 1
时,该方法打印 n
和 return 的值。除了终止条件之外,另一个重要方面是在哪里(即在递归调用 method/function 之前还是之后)处理(例如打印)参数。
public class Main {
public static void main(String[] args) {
count(5);
}
static void count(int n) {
if (n == 1) {
System.out.print(n);
return;
}
count(n - 1);
System.out.print("," + n);
}
}
输出:
1,2,3,4,5
这是它的工作原理:
count(5) -> calls count(4) with remaining thing to do is print ,5 once count(4) returns.
count(4) -> calls count(3) with remaining thing to do is print ,4 once count(3) returns.
count(3) -> calls count(2) with remaining thing to do is print ,3 once count(2) returns.
count(2) -> calls count(1) with remaining thing to do is print ,2 once count(1) returns.
count(1) -> prints 1 and returns.
The remaining thing of count(2) is done i.e. ,2 is printed.
The remaining thing of count(3) is done i.e. ,3 is printed.
The remaining thing of count(4) is done i.e. ,4 is printed.
The remaining thing of count(5) is done i.e. ,5 is printed.
检查 this 以了解有关递归的更多信息。