Java中的评估顺序

时间:2017-08-03 18:47:17

标签: java recursion

所以我有 Fibonacci序列的代码

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)更正之前进行评估吗?

1 个答案:

答案 0 :(得分:5)

正确,从从左到右

首先,你将使用左参数fibonacci(i - 1, memo)完全遍历递归,此时它再次移动递归树,每次计算正确的参数时,再次使用完整的递归树。

快速搜索会生成此图像,说明该过程:

Recursive Fibonacci computation order

请注意,许多值通常会多次计算。您当前的方法尝试通过在数组memo内缓存结果来优化此操作。