使用 Javascript 递归地进行线性搜索
Posted
技术标签:
【中文标题】使用 Javascript 递归地进行线性搜索【英文标题】:Linear Search Recursively using Javascript 【发布时间】:2019-02-10 19:46:13 【问题描述】:我正在尝试使用 javascript 递归地实现线性搜索。
Given Array A = [1,2,3,4,5,6]
函数签名 - 类似这样:
LinearSearchRecursively(ArrayGiven, x, startingValue)
如果找到值则返回索引,否则返回-1,但递归实现。
如果你能附上一个正在运行的 jsbin 或 jsfiddle 将不胜感激。
【问题讨论】:
【参考方案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您的答案添加解释并说明适用的限制和假设。以上是关于使用 Javascript 递归地进行线性搜索的主要内容,如果未能解决你的问题,请参考以下文章