Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在添加Javascript后给出一个数字并返回一个字符串_Javascript_Recursion - Fatal编程技术网

如何在添加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建议的那样,您应该看到调用流。是的,并用括号括起来。这只是用初始参数启动内部函数的调用