【发布时间】:2018-08-22 09:37:27
【问题描述】:
我确实在第一次尝试时确实溢出了堆栈,但是我在没有参数的情况下放置了 return 语句(参见代码中的注释)并且它起作用了。
任务:
编写一个提供类似于 for 循环语句的高阶函数循环。它需要一个值、一个测试函数、一个更新函数和一个主体函数。每次迭代,它首先对当前循环值运行测试函数,如果返回 false,则停止。然后它调用 body 函数,给它当前值。最后,它调用更新函数创建一个新值,并从头开始。
在定义函数时,可以使用常规循环来进行实际的循环。
我没有使用循环。
图书解决方案
function loop(start, test, update, body) {
for (let value = start; test(value); value = update(value)) {
body(value);
}
}
loop(3, n => n > 0, n => n - 1, console.log);
// → 3
// → 2
// → 1
我的解决方案(保留我原来的函数参数名称)
function loop(value, test, update, execute){
if (test(value)) execute(value);
else return // prevents stack overflow?
return loop(update(value),test,update,execute)
}
loop(3, n => n > 0, n => n - 1, console.log);
// → 3
// → 2
// → 1
我只是让控制台输出同样的事情,还是我的解决方案会在真实环境程序中做同样的事情?
我问,因为我不确定我是否真的用递归解决了它,或者只是让控制台输出相同的东西。这将帮助我对自己感觉更好,因为我是一个菜鸟 JS 学习者。谢谢! :)
【问题讨论】:
-
我不明白您所说的“使控制台输出相同的东西”是什么意思。
-
换句话说-我的解决方案是真正的解决方案,还是只是运气-正如您在其他评论中提到的那样。谢谢大佬,不胜感激!
标签: javascript loops recursion