动态规划

124 阅读1分钟

动态规划

动态规划之斐波那契数列

function fibo(n) {
  if (n <= 0) return -1;
  if (n == 1) return 1;
  if (n == 2) return 2;
  var a = 0;
  var b = 1;
  var c;
  for (var i = 3; i <= n; i++) {
    c = a + b;
    a = b;
    b = c;
  }
  return c;
}

console.log(fibo(7));

// f(n)=f(n-1)+f(n-2)
function fibo2(n) {
  if (n <= 0) return -1;
  if (n == 1) return 1;
  if (n == 2) return 2;
  return fibo(n - 1) + fibo(n - 2);
}
console.log(fibo2(7));

动态规划之青蛙跳台阶问题

// 一只青蛙,一次跳一次或两次台阶
// 那么跳n级台阶有多少种跳法

// 跳上n阶台阶之前,它一定在n-1或者n-2级台阶
// 两个子问题:跳上n-1阶的跳法+跳上n-2阶的跳法

// f(n)=f(n-1)+f(n-2)

function jump(n) {
  if (n <= 0) return -1;
  if (n == 1) return 1;
  if (n == 2) return 2;
  return jump(n - 1) + jump(n - 2);
}

变态青蛙跳台阶

// 一只青蛙,一次跳1阶\2阶\n阶台阶
// 那么跳n级台阶有多少种跳法

// f(n)=f(n-1)+f(n-2)+f(n-3)+f(n-4)···

function jump(n) {
  if (n <= 0) return -1;
  if (n == 1) return 1;
  if (n == 2) return 2;
  var result = 0;
  for (var i = 1; i < n; i++) {
    result += jump(n - i);
  }
  return result + 1; //从第0阶直接跳上去的情况
}

console.log(jump(4));