【发布时间】:2021-05-02 04:41:20
【问题描述】:
我目前正在研究函数式编程技术。有关于这个问题的主题[尤其是关于 java ],但没有关于 JS。
我想创建一个递归函数,它可以首先,从我指定的数字然后计数直到我决定的限制达到限制时开始倒计时。我已经可以使用 for 循环做到这一点,但感觉就像是硬编码 因为我在循环中提供了数字。
基本上是这样的:
counter(0,10);
// 0, 1, 2, 3 ... 10, 9, 8... 0
这是我的想法:
counter = (number, limit) => {
limit !=== 0
if ( number = limit ) {
counter(number -1, limit -1)
console.log(number)
} else if ( number < limit ) {
counter(number + 1, limit + 1)
}
}
这背后的想法是,如果数量低于限制计数,如果它们相等,则将每个参数减 1 以继续满足第一个 if 条件。
当我在 v8 上运行此命令时,它会给出 rangeError “已达到最大堆栈大小”。
另外,这不应该是一个无限循环。
for循环版本:
for (let i = 0; i < 11; i++ ) { console.log(i) }
for (let i = 9; i < 11 && i > -1; i--) { console.log(i) }
【问题讨论】:
-
!===在 JS 中不是一个东西。x = y也不应该处于某种状态。改用x == y甚至更好的x === y -
@yunzen 下次会更加小心。我可能是一个月前开始的。知道这些,但过于专注于问题,谢谢你
标签: javascript recursion functional-programming counter