理解返回f(n-1)+ 5。

时间:2016-02-25 05:54:49

标签: java recursion

我正在学习递归需要更好地解释下面的代码。我把它的大部分都放下了,但不是我对函数的最后一部分感到困惑,它说的是return f(n-1) + 5。我得到32为f(7)这是正确的,并在最后打印出来,但我仍然有点模糊,并想知道是否有人会给我一个更好的解释。 outputhttps://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;
}

}

2 个答案:

答案 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.等等。

我认为你基本上了解正在发生的事情;希望,像这样打破它将有助于消除你仍然存在的任何疑虑。