【发布时间】:2021-10-08 05:10:03
【问题描述】:
我正在学习递归函数。为了好玩,我尝试了 FizzBuzz 编码挑战。
我不明白为什么我不能在递归函数中反转我的数组。
版本 1
const fizzBuzzRecursive = num => {
let results = [];
if (num === 1) {
return '1';
} else {
if (num % 3 === 0 && num % 5 === 0) {
results.push('FizzBuzz');
} else if (num % 5 === 0) {
results.push('Buzz');
} else if (num % 3 === 0) {
results.push('Fizz');
} else {
results.push(''+ num);
}
newResults = results.reverse('')
return newResults.concat(fizzBuzzRecursive(num - 1));
}
}
console.log(fizzBuzzRecursive(5));
// prints [ 'Buzz', '4', 'Fizz', '2', '1' ]
为了让它工作,我必须将递归函数放在另一个函数中。
第 2 版
const fizzBuzz = num => {
const fizzBuzzRecursive = num => {
let results = [];
if (num === 1) {
return '1';
} else {
if (num % 3 === 0 && num % 5 === 0) {
results.push('FizzBuzz');
} else if (num % 5 === 0) {
results.push('Buzz');
} else if (num % 3 === 0) {
results.push('Fizz');
} else {
results.push(''+ num);
}
return results.concat(fizzBuzzRecursive(num - 1));
}
}
return fizzBuzzRecursive(num).reverse()
};
console.log(fizzBuzz(5));
// prints [ '1', '2', 'Fizz', '4', 'Buzz' ]
为什么版本 1 不正确,有没有办法让它工作? 提前致谢!
【问题讨论】:
标签: javascript recursion fizzbuzz