Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 递归输出_Java_Recursion_Output - Fatal编程技术网

Java 递归输出

Java 递归输出,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) {

这是我为递归问题编写的以下代码

有人能告诉我输出是怎样的吗

为了证明我有多困惑,我认为输出应该是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) {
        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很容易得到。问几个好问题,你就会明白。将非答案张贴为答案会伤害提问者,因为这会减少有人张贴真实答案的可能性。谁投票否决了一半的答案?请评论。那太粗鲁了。