亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

遞歸調用中的執行順序

遞歸調用中的執行順序

慕斯王 2023-06-04 17:04:15
當返回命令有兩個遞歸調用時,例如 return fib(n-1) + fib(n-2);,這兩個調用是同時執行的,還是fib(n-1)先執行的fib(n-2)?fib(n-1)通過使用記憶化,時間復雜度降低到 O(n),但是只有在執行之前fib(n-2)(然后使用存儲的值)才有可能嗎?*public int fib(int n)是一種使用遞歸計算第 N 個斐波那契數的方法。
查看完整描述

1 回答

?
互換的青春

TA貢獻1797條經驗 獲得超6個贊

Java保證表達式中子表達式的求值順序是從左到右。

Java 編程語言保證運算符的操作數以特定的求值順序出現,即從左到右。

這意味著fib(n-1)將在 之前進行評估fib(n-2)。

但是評估順序并沒有改變這里記憶的復雜性,無論哪種方式它仍然是 O(n) 。當 Java 評估它時,fib(n-1)將通過 完成所有備忘錄值n-1,包括 的值fib(n-2)。調用fib(n-2)不做任何工作;它只是引用已經計算出的值fib(n-1)。

如果您顛倒了代碼中的順序:

fib(n-2)?+?fib(n-1)

Thenfib(n-2)將首先被調用,這將通過 完成所有備忘錄值n-2。然后調用fib(n-1)將使用現有的記憶值來“完成工作”,通過 完成所有值fib(n-1)。

無論哪種方式,在評估這些表達式之后,所有通過的值都n-1被記憶,具有 O(n) 的(最壞情況)時間復雜度(和空間復雜度)。也可能這是調用的結果fib(n),它會額外記住 的值n


查看完整回答
反對 回復 2023-06-04
  • 1 回答
  • 0 關注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號