台阶走法问题
'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: ')
网友评论