如何在添加Javascript后给出一个数字并返回一个字符串
此函数将数字作为输入,并返回一个带和的字符串。它到底是如何工作的如何在添加Javascript后给出一个数字并返回一个字符串,javascript,recursion,Javascript,Recursion,此函数将数字作为输入,并返回一个带和的字符串。它到底是如何工作的 findSolution(21); // returns: ((((1 + 5) + 5) + 5) + 5) 函数查找解决方案(目标){ 函数查找(开始、历史记录){ 如果(开始==目标) 回归历史; 否则如果(开始>目标) 返回null; 其他的 返回查找(开始+5“(“+history+”+5)”)|| 查找(开始*3,(“+历史+”*3)”); } 返回结果(1,“1”); } console.log(find
findSolution(21);
// returns:
((((1 + 5) + 5) + 5) + 5)
函数查找解决方案(目标){
函数查找(开始、历史记录){
如果(开始==目标)
回归历史;
否则如果(开始>目标)
返回null;
其他的
返回查找(开始+5“(“+history+”+5)”)||
查找(开始*3,(“+历史+”*3)”);
}
返回结果(1,“1”);
}
console.log(findSolution(21))代码>这是一个(简单的)递归模式
内部功能可以是:
- 查找已找到的目标,并返回它
- 或在返回
null
- 否则,尝试使用
(n+5)
或(n*3)
调用自身,在执行前一阶段时累积输出
前两个选项是终止递归的选项
|
运算符是第三种情况的重要组成部分。它首先尝试n+5
解决方案,但只有当递归调用返回null
时,懒惰的|
操作符才会计算n*3
调用
但是请注意,如果两个调用都失败,因为n*3
和n+5
都超过了目标值(对于许多数字,它们都超过了目标值),那么整个函数将返回null
,如果函数的目的是找到与给定目标相等的表达式,则该函数不起作用。对于许多输入,它找不到有效的表达式。您(现在已编辑)的语句相互矛盾。它最初说你在这些科目上是“高级”的,而实际上是高级的人理解这段代码是没有问题的。如果你是一个试图理解递归函数如何工作的初学者,在我看来,最好的方法是用铅笔和纸手动处理一个不太深入的例子。假设您是JS解释器,当第一次调用find()
时,记下变量的值,然后记下它是否会执行if、else if或else情况,然后如果它到了else并调用自己,记下它作为参数在页面上的另一行传递了什么值,等等。(或者在函数中添加大量console.log()
语句。)@Badrkhan不,他说的是理解递归。把你的问题完全改成一个无关的问题是完全不合适的。你应该打开一个新问题。我已经相应地将问题回滚到上一个版本。我非常喜欢“接受”也请投反对票。history
参数是它试图构建的实际表达式。随着递归的继续,它会逐渐变长。在find()的第一行放置一个简单的console.log(start,history)
functoid,正如@nnn建议的那样,您应该看到调用流。是的,并用括号括起来。这只是用初始参数启动内部函数的调用