首页  >  文章  >  web前端  >  “FindSequence”函数中的递归如何运行?

“FindSequence”函数中的递归如何运行?

Susan Sarandon
Susan Sarandon原创
2024-10-18 07:55:03501浏览

How Does Recursion Operate in the

深入研究“FindSequence”的递归

Eloquent Javascript 引入了一个具有挑战性的问题:编写一个函数来生成一系列加法和乘法以达到给定的目标数字。提供的代码使用了递归,这引发了对其操作的疑问。

findSequence 函数中存在一个嵌套函数 find。此函数递归地探索当前数字的两种可能的转换:加 5 或乘以 3。每次转换都会产生一个新数字,并且该过程将继续,直到达到目标或当前数字超过目标。

在每个步骤中,都会传递表达式的文本表示。例如,从数字1开始,初始表达式为“1”。如果选择加 5,则表达式变为“(1 5)”。通过记录这些表达式,该函数可以跟踪达到每个数字所采取的步骤。

如果达到目标,则最后一步的表达式表示有效序列。否则,函数返回null,表示失败。进行多次递归调用,每次探索不同的路径,直到找到有效序列或所有路径都已用尽。

为了说明递归,让我们考虑查找目标编号 14 的序列。

(1, "1")
(5, "1 + 5")
(10, "(1 + 5) + 5")
(15, "((1 + 5) + 5) + 5")  // Discard, exceeds goal
(30, "((1 + 5) + 5) * 3")  // Discard, exceeds goal
(15, "(1 + 5) * 3")  // Discard, exceeds goal
(3, "1 * 3")
(8, "(1 * 3) + 5")
(13, "((1 * 3) + 5) + 5")
(18, "(((1 * 3) + 5) + 5) + 5")  // Discard, exceeds goal
(39, "(((1 * 3) + 5) + 5) * 3")  // Discard, exceeds goal
(24, "((1 * 3) + 5) * 3")  // Discard, exceeds goal
(9, "(1 * 3) * 3")
(14, "((1 * 3) * 3) + 5")  // Success!

通过这个逐步递归的过程,函数最终找到序列:“((1 3) 3) 5”,它代表 1 和 3 的乘积加上 5 .

以上是“FindSequence”函数中的递归如何运行?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn