我正在学习递归需要更好地解释下面的代码。我把它的大部分都放下了,但不是我对函数的最后一部分感到困惑,它说的是return f(n-1) + 5
。我得到32为f(7)这是正确的,并在最后打印出来,但我仍然有点模糊,并想知道是否有人会给我一个更好的解释。
output。https://developer.mozilla.org/de/docs/Web/API/HTMLLabelElement。
我知道,一旦n = 1,f(n-1)
n首先是7,那么(7-1)= 6,依此类推,直到它变为1,返回值为2,但是我得到的是丢失。那+ 5
怎么样? 2 + 5 = 7,7 + 5 = 12,... 27 + 5 = 32.这与f(n-1) + 5
public class scratch {
public static void main(String[] args) {
System.out.println(f(7));
}
static int f(int n) {
System.out.println("f(" + n + ")");
if (n <= 1)
return 2;
else
return f(n - 1) + 5;
}
}
答案 0 :(得分:0)
有什么问题?当n
变为1
后,它会2
返回n = 2
,然后此n = 2
会将2 + 5
返回n = 3
,依此类推。
例如,考虑f(7)
:
n = 7, f(6) + 5
n = 6, f(5) + 5
n = 5, f(4) + 5
n = 4, f(3) + 5
n = 3, f(2) + 5
n = 2, f(1) + 5
n = 1, 2
如您所见,f(1)
会将2
返回f(2)
,这会将2 + 5
返回f(3)
,依此类推。
答案 1 :(得分:0)
如果某个程序显示int x = f(1);
,则会调用方法f
。由于参数为1,因此只返回2.
如果某个程序显示int x = f(2);
,则会调用方法f
。参数是2,所以它执行这一行:
return f(n - 1) + 5;
使用参数1再次调用方法f
。正如我在第一段中所述,当您使用参数1调用f
时,它返回2,因此上面的计算结果为
return 2 + 5;
这是7。
如果某个程序显示int x = f(3);
,则会调用方法f
。参数是3,所以它执行这一行:
return f(n - 1) + 5;
使用参数2再次调用方法f
。如前所述,当您使用参数1调用f
时,它返回7,因此上面的计算结果为
return 7 + 5;
这是12.等等。
我认为你基本上了解正在发生的事情;希望,像这样打破它将有助于消除你仍然存在的任何疑虑。