美文网首页
台阶走法问题js实现

台阶走法问题js实现

作者: e042cbe4da21 | 来源:发表于2017-04-13 23:47 被阅读63次

台阶走法问题

'use strict';

// 递归实现
const recursionCount = function (n) {
  if (n <= 0) return 0;
  if (n === 1) return 1;
  if (n === 2) return 2;

  return count(n - 1) + count(n - 2);
};

// 非递归 用数组实现
const unrecursionCount1 = function (n) {
  if (n <= 0) return 0;
  if (n === 1) return 1;
  if (n === 2) return 2;
  const steps = [1, 2];
  for (let i = 2; i < n; i++) {
    steps[i] = a[i - 1] + a[i - 2];
  }

  return steps[n - 1];
};

// 非递归 用迭代实现
const unrecursionCount2 = function (n) {
  let i = 2,
    a = 1,
    b = 2,
    sum = 0;
  if (n < 1) {
    return -1;
  }
  for (; i < n; i++) {
    sum = a + b;
    a = b;
    b = sum;
  }

  return sum;
};

// 打印路径
const printSteps = function (n, preStr) {
  if (typeof n !== 'number') throw new Error('not a number');
  const str = preStr ? preStr : '';
  if (n < 0) {
    console.log('can\'t print Steps, n < 0');

    return;
  }
  if (n === 0) {
    console.log(str);

    return;
  }
  if (n === 1) {
    console.log(`${str} 1`);

    return;
  }
  for (let i = 1; i <= 2; i++) {
    printSteps(n - i, `${str} ${i}`);
  }

  return;
}

printSteps(3, 'steps: ')

相关文章

网友评论

      本文标题:台阶走法问题js实现

      本文链接:https://www.haomeiwen.com/subject/fcwiattx.html