递归 斐波那契

递归函数就是自己调用自己,必须要有结束条件。

计算1-N之间的和

function sum (n) {

  2,结束递归

  if(n ===1) {

    return  1

  }

  1, //把未知问题转已知问题

  return  sum(n-1)+n

}

sum(5);原理:层层递进,层层回归。如下

//sum(5)==》sum(4) + 5

//sum(4)==》sum(3) + 4

//sum(3)==》sum(2) + 3

//sum(2)==》sum(1) + 2

//sum(1)==》1

----------------------------------------------------------------------------------------

斐波那契(计算次数多,性能不佳)

已知一对兔子每月可生一对小兔子,出生的小兔子三个月后,每个月可以生一对兔子。假设没有死亡的情况下一年能有多少兔子?

function fib (n) {

  //第一个月和第二个月兔子的数量都是一对

  if(n ===1 || n ===2) {

    return 1

  }

  return fil(n-1) + fib(n-2)

}

fib(12)

-------------------------------------------------------

优化版

//声明一个容器存储计算过的月份

var cache = {}

function fib (n) {

  //第一个月和第二个月兔子的数量都是一对

  if(n ===1 || n ===2) {

    return 1

  }

  if(cache[n]) {

    return cache[n]

  }else {

    //1,计算兔子数量

    var ret = fil(n-1) + fib(n-2)

    //2,用容器把变量存起来

    cache[n] = ret

    //3,把计算结果返回出去

    return ret;

  }

  return fil(n-1) + fib(n-2)

}

fib(100)

猜你喜欢

转载自www.cnblogs.com/xiaoxiao95/p/12979953.html