【问题标题】:Linear Search Recursively using Javascript使用 Javascript 递归地进行线性搜索
【发布时间】:2019-02-10 19:46:13
【问题描述】:

我正在尝试使用 Javascript 递归地实现线性搜索。

Given Array A = [1,2,3,4,5,6]

函数签名 - 类似这样:

LinearSearchRecursively(ArrayGiven, x, startingValue) 

如果找到值则返回索引,否则返回-1,但递归实现。

如果你能附上一个正在运行的 jsbin 或 jsfiddle 将不胜感激。

【问题讨论】:

    标签: javascript recursion linear-search


    【解决方案1】:

    您可以使用数组解构来获取数组的头部和尾部。

    然后你比较头部,如果它等于你的值,则返回到目前为止的索引,否则,你调用递归函数,尾部和索引递增。

    您的停止条件是数组为空时,在这种情况下您返回 -1。

    在这里,我将递归函数及其调用包装在一个外部函数中,该函数具有更好的 API,没有索引。

    function linearSearch(arr, value) {
      function linearSearchRec(list, idx) {
        if (!list.length) return -1;
        const [head, ...tail] = list;
        if (value === head) return idx;
        else return linearSearchRec(tail, idx + 1);
      }
      return linearSearchRec(arr, 0);
    }
    
    console.log(linearSearch([1,2,3,4,5,6], 1));
    console.log(linearSearch([1,2,3,4,5,6], 4));
    console.log(linearSearch([1,2,3,4,5,6], 10));

    【讨论】:

      【解决方案2】:

      您可以更改函数的签名,因为搜索函数的调用应该是可能的,而无需使用初始索引进行搜索。

      function linearSearchRecursively(a, x, i = 0) {
          if (i >= a.length) return -1;
          if (a[i] === x) return i;
          return linearSearchRecursively(a, x, i + 1);
      }
      
      console.log(linearSearchRecursively([1, 2, 3, 4, 5, 6, 7], 7));
      console.log(linearSearchRecursively([1, 2, 3, 4, 5, 6, 7], 9));
      console.log(linearSearchRecursively([], 7));

      另一种解决方案是对数组使用解构并检查第一个元素。

      function linearSearchRecursively([a, ...rest], x, i = 0) {
          if (a === x) return i;
          if (!rest.length) return -1;
          return linearSearchRecursively(rest, x, i + 1);
      }
      
      console.log(linearSearchRecursively([1, 2, 3, 4, 5, 6, 7], 7));
      console.log(linearSearchRecursively([1, 2, 3, 4, 5, 6, 7], 9));
      console.log(linearSearchRecursively([], 7));

      【讨论】:

        【解决方案3】:

        我会这样做:这是 jsbin 链接:

        https://jsbin.com/lijitet/8/edit?js,console

        /**
         * Linear Search : Recursion
         * Returns index if found -1 otherwise
         * Procedure LinearSearch(Array A, int x, int i)
         * n = A.length and i is starting position of array
         * if (A[i] === x) return i
         * if (i > n) LinearSearch(A, x, i++)
          * 
          */
         function LinearSearchRecursively(ArrayGiven, x, i) {
             const arrayLength = ArrayGiven.length;
        
             if (i > (arrayLength - 1)) {
               return -1;
             }
             if(ArrayGiven[i] === x) {
               return i;
             }
             return LinearSearchRecursively(ArrayGiven, x, i+1); 
         }
        
         // write your test cases here :
         const testArray = [ 1, 2, 3, 4, 5, 6, 7];
        
         console.log(`Missing Element : ${LinearSearchRecursively(testArray, 7, 0)}`);
        

        请随意添加。谢谢。

        【讨论】:

          【解决方案4】:
          let i = 0 
          let recursiveSearch = (array, element) => {     
              if(i >= array.length) return 'Not found'    
              if(array[i] == element) return i 
              else {    
                  i = i+1
                  return recursiveSearch(array, element)
              }
          }
          
          console.log(recursiveSearch([1,5,3,4],4)) // index 3
          console.log(recursiveSearch([1,5,3,4,10,20],5)) //index 2
          console.log(recursiveSearch([1,5,3,4,10,20],50)) // Not found
          

          【讨论】:

          • 虽然此代码可以解决问题,including an explanation 说明如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。请edit您的答案添加解释并说明适用的限制和假设。
          猜你喜欢
          • 1970-01-01
          • 2016-11-13
          • 2020-11-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-20
          • 2012-01-30
          相关资源
          最近更新 更多