Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.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返回null_Javascript_Recursion - Fatal编程技术网

从雄辩的Javascript返回null

从雄辩的Javascript返回null,javascript,recursion,Javascript,Recursion,因此,我从Elount JS获得了以下代码: function findSolution(target) { function find(start, history) { if (start == target) return history; else if (start > target) return null; else return find(start +

因此,我从Elount JS获得了以下代码:

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");
    }

    console.log(findSolution(24));
我的问题是null在这个递归中做了什么?当我们达到以下程度时:

find(26, history) // start = 26, history = (1+5)+5)+5)+5)+5)
它点击返回null的
start>tagert
语句


那么接下来会发生什么呢

操作符是返回第一次或第二次调用结果的快捷方式。如果对
find
的第一次调用返回null,则返回第二次调用的结果


在这种情况下,Null表示到达目标的方法不成功。函数
findSolution
基本上尝试
+5
*3
的所有组合以达到目标。

操作符是返回第一次或第二次调用结果的快捷方式。如果对
find
的第一次调用返回null,则返回第二次调用的结果

在这种情况下,Null表示到达目标的方法不成功。函数
findSolution
基本上是尝试
+5
*3
的所有组合来达到目标。

问题是带有空值的“或”(| |)

function findSolution(target) {
      function find(start, history) {
        if (start == target)
          return history;
        else if (start > target)
          return null;
        else
        {
            var result = find(start + 5, "(" + history + " + 5)"); 
            if(result != null)
                return result;
            else
                return find(start * 3, "(" + history + " * 3)"); 
        }

      }
      return find(1, "1");
    }

    console.log(findSolution(24));
其他解决方案:

function findSolution(target) {
      function find(start, history) {
        if (start == target)
          return history;
        else if (start > target)
          return false;
        else
          return find(start + 5, "(" + history + " + 5)") || 
                 find(start * 3, "(" + history + " * 3)");
      }
      return find(1, "1");
    }
结果是:

(((1 * 3) + 5) * 3)
问题是“or”(| |)的值为空

function findSolution(target) {
      function find(start, history) {
        if (start == target)
          return history;
        else if (start > target)
          return null;
        else
        {
            var result = find(start + 5, "(" + history + " + 5)"); 
            if(result != null)
                return result;
            else
                return find(start * 3, "(" + history + " * 3)"); 
        }

      }
      return find(1, "1");
    }

    console.log(findSolution(24));
其他解决方案:

function findSolution(target) {
      function find(start, history) {
        if (start == target)
          return history;
        else if (start > target)
          return false;
        else
          return find(start + 5, "(" + history + " + 5)") || 
                 find(start * 3, "(" + history + " * 3)");
      }
      return find(1, "1");
    }
结果是:

(((1 * 3) + 5) * 3)
我来试试:

find函数无论如何只能返回2个值:字符串历史记录或null。一旦达到任何停止条件:
start==target
start>target
,这将是整个递归调用的结果

现在,对于每个递归调用,代码可能最多再创建两个递归调用。如果对
find(start+5,“(“+history+”+5)”)
的调用返回null(记住它只能返回null或history),那么
find(start*3,“(“+history+”*3)”)
将作为另一次返回历史的尝试执行,如果第二次调用也返回null,那么null将是您的最终结果。

我将尝试一下:

find函数无论如何只能返回2个值:字符串历史记录或null。一旦达到任何停止条件:
start==target
start>target
,这将是整个递归调用的结果


现在,对于每个递归调用,代码可能最多再创建两个递归调用。如果对
find(start+5,“(“+history+”+5)”)
的调用返回null(记住它只能返回null或history),那么
find(start*3,“(“+history+”*3)”)
将作为另一次返回历史的尝试执行,如果第二次调用也返回null,那么null将是您的最终结果。

调用方得到一个
null
。如果它是递归调用,它将被插入
|
(逻辑or),或者如果它是
findSolution
中的第一个,那么整个结果将是
null
。调用者将得到
null
。如果它是递归调用,它将被插入
|
(逻辑or),或者如果它是
findSolution
中的第一个调用,那么整个结果将是
null
。我很感激这里的每个答案,但这个答案对我来说非常清楚。谢谢。我很感激这里的每一个答案,但这一个对我来说非常清楚。谢谢