需要帮助理解这个递归函数教程
Need help understanding this recursive function tutorial
我在教科书中遇到了这个递归函数的例子。我可以看到这个网站上有其他的线程问了一个关于Eloquent JavaScript的例子的问题,但是用户理解这个例子的困难在于不理解函数是如何调用的。
function findSolution(target){
function find(start, history){
if(start == target)
return history
else if(start > target)
return null
else
return find(start + 5, "(" + history + " + 5)") ||
find(start * 3, "(" + history + " * 3)")
}
return find(1, "1");
}
向findSolution函数提供一个目标数,它执行内部函数find,该函数调用自己,直到通过加5或乘以3找到达到目标数的方法。假设我提供数字13作为要达到的目标。参数增量如下:
Start = 1 + 5, History = "(1 + 5)"
Start = 6 + 5, History = "(1 + 5) + 5"
Start = 11 + 5, History = "(1 + 5) + 5) + 5"
Start变为16,而this比13大,因此this将返回null。所以find函数尝试将start乘以3而不是加5,返回到11…
Start = 11 * 3, History = "(1 + 5) + 5) * 3"
这个值也太高了,因此会返回null。函数在这里停止了,对吧??
当我对它进行测试时,每次发现递归调用自己时,控制台都会记录开始值,它继续调用自己,直到到达编号13。函数在33之后循环的起始值为:
18
3
8
13
但是这怎么可能呢?函数不应该在达到16和33之后返回false吗?
Console.log基本情况之前的历史记录。这将有助于理解它是如何工作的
示例代码中有语法错误。它应该看起来像这样:
function findSolution(target){
function find(start, history){
if(start == target)
return history
else if(start > target)
return null
else
return (find(start + 5, "(" + history + " + 5)") ||
find(start * 3, "(" + history + " * 3)"))
}
return find(1, "1");
}
(注意内部函数中最后一个返回值的结构)
当运行输入为13的更新函数时,我在控制台中看到:
(((1 * 3) + 5) + 5)
相关文章:
- 递归函数中断
- 将jQuery对象传递到setTimeout递归函数中
- 对象与递归函数的比较
- 循环内部的递归函数未按预期工作
- 递归函数返回不正确
- 递归函数编程困境
- 给定一个带有数字的数组,我如何编写一个递归函数,当 2 个元素加起来为一个目标时,它会在数组中查找索引
- 返回不会退出 javascript 中的递归函数
- jquery递归函数转换为非递归函数
- AngularJS,promise带有递归函数
- 如何停止此递归函数
- 如何将下面的递归函数转换为纯函数
- jQuery setTimeout ajax递归函数在即时消息程序中短时间后抛出错误
- Javascript递归函数引用了这一点
- 如何将这个递归函数转换为迭代函数
- jQuery递归函数调用和Javascript之间有区别吗;s setInterval
- 从javascript中的递归函数获取undefined
- 将递归函数转换为异步 CPS 实现 (javascript)
- 我怎样才能把它变成一个循环,而不是一个递归函数
- 需要帮助理解这个递归函数教程