2017-08-03 88 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中缓存结果来优化此方法。