我正在尝试使用Java递归实现线性搜索。
Given Array A = [1,2,3,4,5,6]
功能签名-类似这样:
LinearSearchRecursively(ArrayGiven, x, startingValue)
如果找到值,则返回索引,否则返回-1,但递归实现。
如果您可以附加正在运行的jsbin或jsfiddle,将不胜感激。
答案 0 :(得分:1)
您可以更改函数的签名,因为应该可以在不获取用于搜索的初始索引的情况下调用搜索函数。
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));
答案 1 :(得分: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 :(得分:0)
我会做这样的事情:这是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)}`);
请随时添加。谢谢。