2.4 KiB
2.4 KiB
id, challengeType, forumTopicId, title
id | challengeType | forumTopicId | title |
---|---|---|---|
5cc0bd7a49b71cb96132e54c | 1 | 301180 | 使用递归来创建一个数字序列 |
Description
接着上一个挑战,有另外一个机会来创建递归函数解决问题。
Instructions
rangeOfNumbers
函数,包含两个参数。函数应该返回一个连续数字数组,startNum
参数开始 endNum
参数截止。开始的数字小于或等于截止数字。函数必需递归调用自身,不能使用任意形式的循环。要考虑到 startNum
和 endNum
相同的情况。
Tests
tests:
- text: 函数应该返回一个数组。
testString: assert(Array.isArray(rangeOfNumbers(5, 10)));
- text: 不能包含循环语句(<code>for</code> 或者 <code>while</code> 或者高阶函数比如 <code>forEach</code>、<code>map</code>、<code>filter</code> 或者 <code>reduce</code>)。
testString: assert(!removeJSComments(code).match(/for|while|forEach|map|filter|reduce/g));
- text: <code>rangeOfNumbers</code> 应该使用递归函数(调用自身)来完成这个挑战。
testString: assert(removeJSComments(rangeOfNumbers.toString()).match(/rangeOfNumbers\s*\(.+\)/));
- text: <code>rangeOfNumbers(1, 5)</code> 应该返回 <code>[1, 2, 3, 4, 5]</code>。
testString: assert.deepStrictEqual(rangeOfNumbers(1, 5), [1, 2, 3, 4, 5]);
- text: <code>rangeOfNumbers(6, 9)</code> 应该返回 <code>[6, 7, 8, 9]</code>。
testString: assert.deepStrictEqual(rangeOfNumbers(6, 9), [6, 7, 8, 9]);
- text: <code>rangeOfNumbers(4, 4)</code> 应该返回 <code>[4]</code>。
testString: assert.deepStrictEqual(rangeOfNumbers(4, 4), [4]);
Challenge Seed
function rangeOfNumbers(startNum, endNum) {
return [];
};
After Test
const removeJSComments = str => str.replace(/\/\*[\s\S]*?\*\/|\/\/.*$/gm, '');
Solution
function rangeOfNumbers(startNum, endNum) {
if (endNum - startNum === 0) {
return [startNum];
} else {
var numbers = rangeOfNumbers(startNum, endNum - 1);
numbers.push(endNum);
return numbers;
}
}