gpt4 book ai didi

javascript - 递归函数如何处理||运算符(operator)?

转载 作者:行者123 更新时间:2023-11-28 17:45:50 24 4
gpt4 key购买 nike

function findSolution(target) {
function find(current, history) {
if (current == target)
{debugger;
return history;
}
else if (current > target){
debugger;
return null;
}
else{
debugger;
return find(current + 5, "(" + history + " + 5)") ||
find(current * 3, "(" + history + " * 3)");
}
}
debugger;
return find(1, "1");
}

console.log(findSolution(13));

在到达 find(33, "(((1 + 5) + 5) * 3)") 后工作期间,为什么这会删除之前的 +5 而不是刚刚调用的 *3 ?

代码的工作原理:

find(1, "1")
find(6, "(1 + 5)")
find(11, "((1 + 5) + 5)")
find(16, "(((1 + 5) + 5) + 5)")
too big
find(33, "(((1 + 5) + 5) * 3)") //why does this remove +5 from earlier and not *3 it just called
too big
find(18, "((1 + 5) * 3)")
too big
find(3, "(1 * 3)")
find(8, "((1 * 3) + 5)")
find(13, "(((1 * 3) + 5) + 5)")
found!

最佳答案

每次调用 find() 都会产生一个新的本地历史记录。您的递归调用不会改变历史记录;他们制作新的琴弦。

因此在

    return find(current + 5, "(" + history + " + 5)") ||
find(current * 3, "(" + history + " * 3)");

首先使用+ 5 形式调用该函数,如果返回null,则使用* 3 形式调用该函数。所以 + 5 永远不会被“删除”;该字符串将被简单地丢弃。

此外,对于||,如果左侧表达式返回非空,则根本不计算右侧表达式。

关于javascript - 递归函数如何处理||运算符(operator)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46747030/

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