Java 递归输出
这是我为递归问题编写的以下代码 有人能告诉我输出是怎样的吗 为了证明我有多困惑,我认为输出应该是6,12,20,1Java 递归输出,java,recursion,output,Java,Recursion,Output,这是我为递归问题编写的以下代码 有人能告诉我输出是怎样的吗 为了证明我有多困惑,我认为输出应该是6,12,20,1 package Examples; public class QuestionDemo { public static void main(String[] args) { System.out.println(recCall(2)); } public static int recCall(int num) { if (num == 5) {
package Examples;
public class QuestionDemo {
public static void main(String[] args) {
System.out.println(recCall(2));
}
public static int recCall(int num) {
if (num == 5) {
return 1;
} else {
return num * recCall(++num);
}
}
}
是的,如果您尝试移动调用(++num)并放入新的编号,即
+++num
,则结果将是=2*3*4
,在5中它将返回1,因此2*3*4*1
如果您尝试移动调用(++num),则返回是然后将新的数字放入++num
中,结果将是=2*3*4
,在5中返回1,因此2*3*4*1
此递归采用自下而上的方法。在获得其他递归调用的值之前,首先要查找基本情况的值
这就是为什么您得到输出=24:
_
/|\
/ | \
recCall(4) = 4 * recCall(5) = 4 + / | \ // recCall(5) is your base case.
recCall(3) = 3 * recCall(4) = 12 + |
----------------------------------- |
recCall(2) = 2 * recCall(3) = 24 | // This was your first call to the recursive function.
您不是遍历值,而是向上添加它们。此递归采用自底向上的方法。在获得其他递归调用的值之前,首先要查找基本情况的值 这就是为什么您得到输出=24:
_
/|\
/ | \
recCall(4) = 4 * recCall(5) = 4 + / | \ // recCall(5) is your base case.
recCall(3) = 3 * recCall(4) = 12 + |
----------------------------------- |
recCall(2) = 2 * recCall(3) = 24 | // This was your first call to the recursive function.
您不是遍历值,而是将它们全部相加。这是因为您使用的是
recCall(++num)
,并且您使用的是pre increment
运算符,它在调用方法之前增加值
请阅读java++pre-increment的工作原理:-
因此,您的递归调用如下所示
f(2)= 2*f(3)=2*12 = 24.
f(3)=3*f(4)= 3*4=12
f(4)=4*f(5) = 4*1
f(5)= 1
因此,它返回24。Its,因为您使用的是
recCall(++num)
,并且您使用的是pre increment
运算符,它在调用方法之前增加值
请阅读java++pre-increment的工作原理:-
因此,您的递归调用如下所示
f(2)= 2*f(3)=2*12 = 24.
f(3)=3*f(4)= 3*4=12
f(4)=4*f(5) = 4*1
f(5)= 1
因此它返回24。您有4个递归调用
当您呼叫recCall时的第一个呼叫(2)
然后是recCall(3)、recCall(4)和recCall(5)
recCall(5)返回1
recCall(4)返回4*1
recCall(3)返回3*4*1
recCall(2)返回2*3*4*1=24您有4个递归调用
当您呼叫recCall时的第一个呼叫(2)
然后是recCall(3)、recCall(4)和recCall(5)
recCall(5)返回1
recCall(4)返回4*1
recCall(3)返回3*4*1
recCall(2)返回2*3*4*1=24
recCall(int num):
仔细了解您认为输出会是这样的原因。你的意思是说你认为它会有4个输出吗?你没有循环你的println,所以4个输出是不可能的,因为每个递归的返回值都会乘以传递的数字。@simigami 50 rep很容易得到。问几个好问题,你就会明白。将非答案张贴为答案会伤害提问者,因为这会减少有人张贴真实答案的可能性。谁投票否决了一半的答案?请评论。这太粗鲁了。仔细看看你为什么认为输出会是这样。你的意思是说你认为它会有4个输出吗?你没有循环你的println,所以4个输出是不可能的,因为每个递归的返回值都会乘以传递的数字。@simigami 50 rep很容易得到。问几个好问题,你就会明白。将非答案张贴为答案会伤害提问者,因为这会减少有人张贴真实答案的可能性。谁投票否决了一半的答案?请评论。那太粗鲁了。