gpt4 book ai didi

Javascript..完全迷失在本教程中

转载 作者:行者123 更新时间:2023-11-29 18:34:04 26 4
gpt4 key购买 nike

我的入门教程突然变得很高级了。我不知道这个程序是如何工作的。能用通俗易懂的语言解释一下吗?

最后它打印出 (((1 * 3) + 5) * 3),但我根本不明白。我知道 findSequence 已通过 24,这会触发函数 find。我假设 find 函数被传递给 1,"1"而后者被分配给 history?但是我不明白为什么第二个1要用引号“1!”,我也不明白它返回时引号的使用 find(start etc.

function findSequence(goal) {
function find(start, history) {
if (start == goal)
return history;
else if (start > goal)
return null;
else
return find(start + 5, "(" + history + " + 5)") ||
find(start * 3, "(" + history + " * 3)");
}
return find(1, "1");
}

print(findSequence(24));

最佳答案

您有一个“输出”字符串 (((1 * 3) + 5) * 3)、一个目标 24 和第一个字符 111 * 3 中的 1。该程序将组装一个包含数学表达式的字符串,添加 ()、*3 和 +5 以尝试获得目标。 find 函数的两个参数是当前总数和将生成总数的表达式。显然表达式是一个字符串。 find 将当前总数与目标进行比较,如果相等则表达式正确并返回它,如果当前总数 > 目标则失败并返回 null。否则他会向表达式添加一些操作。他尝试了两种“方式”,一种是将当前结果乘以*3,另一种是将当前结果加+5。它在树上是递归的(所以每次他都会 fork 两次递归调用)。空|| something == something,所以找到响应的分支将返回他的响应,另一个分支将返回 null 并且“获胜”响应将被传回。

假设目标是 11。

  • 找到(1,“1”)
    1. 将 1 与 11 进行比较并调用:(2.) find(1 + 5, "("+ "1"+ "+ 5)") (so find(6, "(1 + 5)") 和 ( 3.) 查找(1 * 3, "("+ "1"+ "* 3)") (所以查找(3, "(1 * 3)")
    2. 比较 6 和 11 并调用 (4.) find (6 + 5, "("+ "(1 + 5)"+ "+ 5)") (so finds(11, "((1 + 5) + 5)") 和 (5.) 找到 (6 * 3, "("+ "(1 + 5)"+ "* 3)"(所以找到 (18, "((1 + 5) * 3)"
    3. 比较 3 和 11 并调用 (6.) find (3 + 5, "("+ "(1 * 3)"+ "+ 5)") (so finds(8, "((1 * 3) + 5)") 和 (7.) 找到 (3 * 3, "("+ "(1 * 3)"+ "* 3)"(所以找到 (8, "((1 + 3) * 3)"
    4. 将 11 与 11 进行比较。数字相等。所以他返回“((1 + 5) + 5)”(历史)。 5、6、7 会在某个时候“过火”并超过 11,因此它们将返回 null。空||空 == 空,“((1 + 5)+ 5)” || null == "((1 + 5) + 5)",因此历史将战胜 null 并返回。

为了让它更清晰,试试这些版本:

function findSequence(goal) {
function find(start, history) {
if (start == goal)
return history;
else if (start > goal)
return null;
else {
var ret = find(start + 5, "(" + history + " + 5)");

if (ret == null)
ret = find(start * 3, "(" + history + " * 3)");

return ret;
}
}

return find(1, "1");
}

print(findSequence(24));

而这个,where 而不是表达式,你只会得到 + 和 * 的字符串

function findSequence(goal) {
function find(start, history) {
if (start == goal)
return history;
else if (start > goal)
return null;
else {
var ret = find(start + 5, history + "+");

if (ret == null)
ret = find(start * 3, history + "*");

return ret;
}
}

return find(1, "1");
}

print(findSequence(24));

请注意,例如,它非常复杂,因为它使用了闭包(本地定义的函数)。

关于Javascript..完全迷失在本教程中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5074862/

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