2016-02-25 36 views
-1

我在学习递归需要更好的解释下面的代码。我大部分时间都处于关闭状态,但不是我在函数的最后部分对return f(n-1) + 5表示困惑。我得到了f(7)的32,这是正确的,并且在最后打印出来,但我仍然有点模糊,并想知道是否有人会给我一个更好的解释。 The output。 我知道,一旦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了解返回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

这不是一个因子方法,这是错误的:( – wajeeh

+0

这是一个因子方法: 'static int f(int n){ System.out。println(“f(”+ n +“)”);如果(n <= 1){ 返回1; } else { return f(n-1)* n; } }' – wajeeh

+0

谢谢。我对另一个问题感到困惑。 – EdtheGreat

回答

0

问题是什么?当您的n变为1时,它将返回2n = 2,然后此n = 2返回2 + 5n = 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)将返回2f(2)将返回2 + 5f(3)等。

0

如果一个程序说int x = f(1);,那么它调用方法f。由于参数为1,这只返回2.

如果一个程序说int x = f(2);,它调用方法f。该参数是2,所以它执行这一行:

return f(n - 1) + 5; 

正如我在第一段提到它调用方法f再次,与参数1,当你调用f与参数1,它将返回2,所以上述计算结果为

return 2 + 5; 

其7.

如果程序说int x = f(3);,它调用方法f。该参数为3,故执行这一行:

return f(n - 1) + 5; 

正如我前面提到它调用方法f再次,随着参数2,当你调用f与参数1,它返回7,所以上述求值到

return 7 + 5; 

这是12.等等。

我想你基本上都明白发生了什么;希望能够像这样把它分解出来,这将有助于消除你仍然有的任何疑虑。