天天看點

《高階Perl》——3.1 緩存修正遞歸

在1.8節看到遞歸函數有時耗時太長了,即便對簡單的輸入,那個fibonacci函數就是這個問題的一個例子:

正如在1.8節看到的,這個函數對多數參數都運作緩慢,因為它在重複計算那些已經計算過的結果上浪費時間。例如,fib(20)需要計算fib(19)和fib(18),但是fib(19)也要計算fib(18),fib(17)也是一樣,每次fib(18)調用時也都要計算。這是遞歸函數的一個普遍問題,而它就會被緩存修正。如果為fib添加緩存技術,那它就不會在第二次需要fib(18)的時候再從頭開始計算它了,fib将簡單地取回緩存的第一次計算fib(18)的結果。不用再擔心會計算fib(17)三次或fib(16)五次,因為計算隻進行一次,然後緩存的結果将于再次需要的時候被快速地取回。