2017-08-03 54 views
1

所以我對斐波那契序列此代碼:爲了評估在Java中

int fibonacci(int i, int[] memo) { 
    if (i == 0 || i == 1) return i; 

    if (memo[i] == 0) { 
     memo[i] = fibonacci(i - 1, memo) + fibonacci(i - 2, memo); 
    } 

    return(memo[i]); 
} 

我的問題是:fibonacci(i-1, memo)總是會fibonacci(i-2, memo)正確之前評估?

+0

可能的重複[在Java中是否保證從左到右的操作順序?](https://stackoverflow.com/questions/9081393/is-the-left-to-right-order-of-operations -guaranteed-在-java的) – Dukeling

回答

5

正確,從從左到右

首先,您將完全遍歷遞歸,然後使用左邊參數fibonacci(i - 1, memo),當它再次移動遞歸樹時,每次正確的參數將被計算出來,再次使用完整的遞歸樹。

快速搜索收率這個圖像示出處理:

Recursive Fibonacci computation order

注意,許多值通常計算多次。您目前的方法試圖通過在數組memo中緩存結果來優化此方法。