1、初识
假设一对初生兔子一个月到成熟期
一对成熟兔子每月生一对兔子
并且一年内没有发生死亡
那么,由一对初生兔子开始
一年以后可以繁殖多少对兔子?
解题思路:
某月的兔子对数量 = 上个月的兔子对数量 + 上上个月的兔子对数量;
怎么来理解这句话,上上个月的兔子不管是成熟的兔子
还是没有成熟兔子对都应该在上个月成熟了,
那就是上上个月的兔子对在这个月生崽了,新生崽数量就是上上个月的兔子,
成熟的兔子对数量就是上个月的兔子对数量。
递归的思想就是,将一个大型复杂的概念分解到相似的较小规模的问题,解决每个简单的问题,进而解决复杂的问题。
按照这个思路,建立数学公式:
当n>2时,fn(n) = fn(n-1) + fn(n-2);
当n<=2时,fn(n) = 1;
function fn(n){
if(n<=2){
return 1
}
return fn(n-1)+fn(n-2)
}
2、加缓存
递归会有大量的重复计算,如果可以缓存计算过的值,可以提高代码效率
利用闭包可以缓存变量
function CreateFib() {
const res = []
return function fib(n) {
if (res[n]) {
return res[n]
}
if (n <= 2) {
res[n] = 1
return 1
}
const temp = fib(n - 1) + fib(n - 2)
res[n] = temp
return temp
}
}
let fib = CreateFib()