不确定此方法的作用

时间:2019-12-19 04:05:30

标签: java

我对return语句的功能感到困惑。它是在方法内部执行该方法还是将某项相乘?

 public int recur(int n)
 {
    if (n <= 10)
        return n*2;
    else
        return recur(recur(n/3));
 }

4 个答案:

答案 0 :(得分:0)

有两个return语句,因为有两个可能的结果。如果n小于或等于10,则该方法返回n*2,但是如果n大于10,则它执行第二个return语句(确实涉及调用自身)。 / p>

答案 1 :(得分:0)

return语句将结果提供给调用方。 如果呼叫者自己呼叫,则将为该新呼叫在堆栈上建立一个新框架。当堆栈中的最后一帧返回值时,程序退出。

为对此进行跟踪,我们假设初始调用为recur(15),并从A处获得20,如下所示。 A,B和C是用于程序执行的堆栈帧。

A: recur(15) -> recur(recur(15/3)) -> Go to B -> When B has returned -> Go to C -> When C has returned, A will return 20.
A is gone now, and program exits.

============================================= < / p>

B: recur(15/3) i.e. recur(5)
Note that this is the inner recur()
Now, we hit the base case of n <= 10
n * 2 = 5 * 2 = 10 returned to A
B is gone now

============================================= < / p>

C: recur(10)
Now, we again hit the base case of n <= 10
Note that this is the outer recur()
n * 2 = 10 * 2 = 20 returned to A
C is gone now

尾部递归是一种优化,如果递归调用是方法的最后一行,它将使用相同的帧代替单独的帧。但是上述逻辑可以用来大致理解递归。

答案 2 :(得分:0)

在'return'关键字之后编写的任何表达式的结果将从被调用的地方返回到该代码语句。递归意味着从自身的身体调用self方法。在这里我们可以想象'recur'方法的编写次数与调用recur方法的次数相同,并且参数值不同。

答案 3 :(得分:0)

出于好奇,我这样做:

for (int i = -10; i < 200; i++) {
    System.out.println("input " + i + ", result: " + Util.recur(i));
}

我明白了

input -10, result: -20
input -9, result: -18
input -8, result: -16
input -7, result: -14
input -6, result: -12
input -5, result: -10
input -4, result: -8
input -3, result: -6
input -2, result: -4
input -1, result: -2
input 0, result: 0
input 1, result: 2
input 2, result: 4
input 3, result: 6
input 4, result: 8
input 5, result: 10
input 6, result: 12
input 7, result: 14
input 8, result: 16
input 9, result: 18
input 10, result: 20
input 11, result: 12
input 12, result: 16
input 13, result: 16
input 14, result: 16
input 15, result: 20
input 16, result: 20
input 17, result: 20
input 18, result: 16
input 19, result: 16
input 20, result: 16
input 21, result: 16
input 22, result: 16
input 23, result: 16
input 24, result: 20
input 25, result: 20
input 26, result: 20
input 27, result: 16
input 28, result: 16
input 29, result: 16
input 30, result: 16
input 31, result: 16
input 32, result: 16
input 33, result: 16
input 34, result: 16
input 35, result: 16
input 36, result: 20
input 37, result: 20
input 38, result: 20
input 39, result: 20
input 40, result: 20
input 41, result: 20
input 42, result: 20
input 43, result: 20
input 44, result: 20
input 45, result: 16
input 46, result: 16
input 47, result: 16
input 48, result: 16
input 49, result: 16
input 50, result: 16
input 51, result: 16
input 52, result: 16
input 53, result: 16
input 54, result: 20
input 55, result: 20
input 56, result: 20
input 57, result: 20
input 58, result: 20
input 59, result: 20
input 60, result: 20
input 61, result: 20
input 62, result: 20
input 63, result: 20
input 64, result: 20
input 65, result: 20
input 66, result: 20
input 67, result: 20
input 68, result: 20
input 69, result: 20
input 70, result: 20
input 71, result: 20
input 72, result: 16
input 73, result: 16
input 74, result: 16
input 75, result: 16
input 76, result: 16
input 77, result: 16
input 78, result: 16
input 79, result: 16
input 80, result: 16
input 81, result: 20
input 82, result: 20
input 83, result: 20
input 84, result: 20
input 85, result: 20
input 86, result: 20
input 87, result: 20
input 88, result: 20
input 89, result: 20
input 90, result: 20
input 91, result: 20
input 92, result: 20
input 93, result: 20
input 94, result: 20
input 95, result: 20
input 96, result: 20
input 97, result: 20
input 98, result: 20
input 99, result: 20
input 100, result: 20
input 101, result: 20
input 102, result: 20
input 103, result: 20
input 104, result: 20
input 105, result: 20
input 106, result: 20
input 107, result: 20
input 108, result: 16
input 109, result: 16
input 110, result: 16
input 111, result: 16
input 112, result: 16
input 113, result: 16
input 114, result: 16
input 115, result: 16
input 116, result: 16
input 117, result: 16
input 118, result: 16
input 119, result: 16
input 120, result: 16
input 121, result: 16
input 122, result: 16
input 123, result: 16
input 124, result: 16
input 125, result: 16
input 126, result: 16
input 127, result: 16
input 128, result: 16
input 129, result: 16
input 130, result: 16
input 131, result: 16
input 132, result: 16
input 133, result: 16
input 134, result: 16
input 135, result: 20
input 136, result: 20
input 137, result: 20
input 138, result: 20
input 139, result: 20
input 140, result: 20
input 141, result: 20
input 142, result: 20
input 143, result: 20
input 144, result: 20
input 145, result: 20
input 146, result: 20
input 147, result: 20
input 148, result: 20
input 149, result: 20
input 150, result: 20
input 151, result: 20
input 152, result: 20
input 153, result: 20
input 154, result: 20
input 155, result: 20
input 156, result: 20
input 157, result: 20
input 158, result: 20
input 159, result: 20
input 160, result: 20
input 161, result: 20
input 162, result: 16
input 163, result: 16
input 164, result: 16
input 165, result: 16
input 166, result: 16
input 167, result: 16
input 168, result: 16
input 169, result: 16
input 170, result: 16
input 171, result: 16
input 172, result: 16
input 173, result: 16
input 174, result: 16
input 175, result: 16
input 176, result: 16
input 177, result: 16
input 178, result: 16
input 179, result: 16
input 180, result: 16
input 181, result: 16
input 182, result: 16
input 183, result: 16
input 184, result: 16
input 185, result: 16
input 186, result: 16
input 187, result: 16
input 188, result: 16
input 189, result: 16
input 190, result: 16
input 191, result: 16
input 192, result: 16
input 193, result: 16
input 194, result: 16
input 195, result: 16
input 196, result: 16
input 197, result: 16
input 198, result: 16
input 199, result: 16

并基于数据:

  1. 负数会使它翻倍
  2. 输入1到9使其也加倍
  3. 10及以上,结果为16或20

我认为这只是模式而已,这只是功能可能特定于某人的业务