2016-02-25 87 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.等等。

我想你基本上都明白髮生了什麼;希望能夠像這樣把它分解出來,這將有助於消除你仍然有的任何疑慮。