递归函数帮助 - Java

时间:2015-07-12 13:16:52

标签: java function recursion

我是新来的。 我在Java中遇到了递归函数的问题。

 public static void main(String[] args) {
    System.out.println(f(3));
}

private static int f(int n) {
    if (n<=0) return 1;
    return 2*f(n-1)+3; 
}

如果我设置n = 3,则结果为29。 请帮忙,我不明白结果,这会很好, 如果有人能够准确地解释这个功能发生了什么。

3 个答案:

答案 0 :(得分:2)

查看方法

private static int f(int n) {
    if (n<=0) return 1;
    return 2*f(n-1)+3; 
}

首先,f(3)将被称为

方法返回2*f(2)+3

计算f(2)方法需要返回2*f(1)+3

f(1)将计算为2*f(0)+3

条件f(0)

1n<=0,所以让它回溯

2*1+3 = 5 = f(1)
2*5+3 = 13 = f(2)
2*13+3 = 29 = f(3)

答案 1 :(得分:1)

f(0)为1。

通过将前一个数字加倍并添加3来获得下一个数字。

所以序列是1,5,13,​​29,61等

通过递归解决这个问题并不是最好的方法(你的堆栈会因很小的术语而溢出);一个正常的循环会更好。

答案 2 :(得分:1)

学习跟踪递归函数的执行有助于您将来创建。这是一项重要的发展技能。

让我们做一下。

每个递归函数都有一个&#34;退出条件&#34;或&#34;基本情况&#34;。在你的函数中,当n <= 0时。你传入3,结果将是:

2 * f(2)+ 3

什么是f(2)? 2 * f(1)+ 3

什么是f(1)? 2 * f(0)+3

我们知道f(0)是1,因为这是你的基本情况,所以现在倒退并填写下表:

f(0): 1
f(1): 2*1 + 3 = 5
f(2): 2*5 + 3 = 13
f(3): 2*13 + 3 = 29