經過一個數組來及記錄已經求過的值,而後在須要的取出那個值便可。
//斐波那契函數 function fb(n) { if (n <= 0) { return -1 } var memory = new Array(n + 1) for (var i = 2; i < memory.length; i++) { memory[i] = -1 } return fbDiGui(n, memory) } //定義一個遞歸函數 function fbDiGui(n , memory) { if (memory[n] != -1) { return memory[n] } if (n <= 2) { memory[n] = 1 } else { memory[n] = fbDiGui(n-2) + fbDiGui(n - 1) } }
//從下到上 function fbE(n) { var memory = new Array(n + 1); for (var i = 1; i < n; i++) { if (i <= 2) { memory[n] = 1; } else { memory[n] = memory[n - 1] + memory[n - 2]; } } return memory[n]; }