簡體   English   中英

Java中的評估順序

[英]Evaluation order in 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)是否正確?

正確, 從左到右

首先,您將使用左參數fibonacci(i - 1, memo)完全遍歷遞歸,此后,當它再次將遞歸樹上移時,每次將計算右參數,並再次使用完整的遞歸樹。

快速搜索產生此圖,說明了該過程:

遞歸斐波那契計算順序

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM