gpt4 book ai didi

javascript - 递归运算如何携带结果

转载 作者:行者123 更新时间:2023-12-01 00:40:38 25 4
gpt4 key购买 nike

如果我无法通过引用传递整数,我如何携带此函数的结果:

function operation(k, n, result) {
if (k == 0) {
console.log(n);
result += n;
return result;
} else {
//the result variable its back to the old value when the recursions goes back
for (var i = 1; i <= n; i++) {
operation(k - 1, i, result);
}
}
}

console.log('resultado = ', operation(2, 3, 0));

当 k=0 时,我需要在结果上累积 n 值,但结果会返回到较旧的值。我不确定如何实现

最佳答案

在 JavaScript 中,参数是按值传递的:result 参数是递归函数执行上下文中的一个单独变量。

正如 @Pointy 在评论中所说,您需要将返回值分配回 result。这个想法是返回新值。

看起来像这样:

function operation(k, n, result) {
if (k == 0) {
result += n;
} else {
for (var i = 1; i <= n; i++) {
result = operation(k - 1, i, result);
}
}
return result;
}
console.log('resultado = ', operation(2, 3, 0));

尽管这可行,但实现递归的更自然的方法是让递归调用产生一个独立于其运行的更大上下文的结果:它不必知道“到目前为止的结果”。相反,它应该返回结果,就像执行顶级调用一样。由调用者进一步累积结果。

因此,使用该模式,您根本不会将结果作为参数传递:

function operation(k, n) {
if (k == 0) return n;
let result = 0; // we start from scratch
for (var i = 1; i <= n; i++) {
result += operation(k - 1, i); // note the addition here!
}
return result;
}
console.log('resultado = ', operation(2, 3));

关于javascript - 递归运算如何携带结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57738972/

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