gpt4 book ai didi

javascript - Eloquent JavaScript ch5 - "Your own loop"解决方案(循环与递归)

转载 作者:行者123 更新时间:2023-12-01 02:20:00 30 4
gpt4 key购买 nike

我第一次尝试时确实溢出了堆栈,但后来我在没有参数的情况下放置了 return 语句(请参阅代码中的注释)并且它起作用了。

任务:

编写一个高阶函数循环,提供类似于 for 循环语句的内容。它需要一个值、一个测试函数、一个更新函数和一个主体函数。每次迭代,它首先对当前循环值运行测试函数,如果返回 false 则停止。然后它调用主体函数,为其提供当前值。最后,它调用更新函数创建一个新值,并从头开始。

定义函数时,您可以使用常规循环来执行实际循环。

我没有使用循环。

图书解决方案

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

我是否只是让控制台输出相同的内容,或者我的解决方案会在真实环境程序中执行相同的操作吗?

我问,因为我不确定我是否真的用递归解决了它,或者只是让控制台输出相同的东西。这将帮助我 self 感觉更好,因为我是一名 JS 新手。谢谢! :)

最佳答案

是的,这是该任务的正确递归实现。您并非偶然获得了正确的输出。

else return 不过有点奇怪。我会写任何一个

function loop(value, test, update, execute) {
if (test(value)) {
execute(value);
return loop(update(value), test, update, execute);
} // else stop
}

function loop(value, test, update, execute) {
if (!test(value)) return; // stop
execute(value);
return loop(update(value), test, update, execute);
}

关于javascript - Eloquent JavaScript ch5 - "Your own loop"解决方案(循环与递归),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49267890/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com