I'm working through the Khan Academy Binary Search problem and step three is asking for some basic additions to "...help visualize how long the search takes."
The prompt asks to "...add a println()
statement that displays the total number of guesses it takes to find the result.
Your function should only print the total number of guesses when it has found the target. Your function shouldn't be printing the number of guesses every loop."
I have done this successfully with a incrementing counter and a println()
with that variable. Running the code works perfectly, however, the Khan Academy pre-built environment will not let me past this step. Is there another way they are expecting?
Code here:
/* Returns either the index of the location in the array,
or -1 if the array did not contain the targetValue */
var doSearch = function(array, targetValue) {
var min = 0;
var max = array.length - 1;
var guess;
var guessTotal = 0;
while(min <= max){
guess = Math.floor((min + max) / 2);
println("You guessed " + guess);
if(array[guess] === targetValue){
println(guessTotal);
return guess;
}
else if (array[guess] < targetValue){
min = guess + 1;
}
else{
max = guess -1;
}
guessTotal ++;
}
return -1;
};
var primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37,
41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97];
var result = doSearch(primes, 73);
println("Found prime at index " + result);
Program.assertEqual(doSearch(primes, 73), 20);
Note: I also tried adding returning an array with the guess
and guessTotal
, then printing them from the result
. That also did what they asked, but did not pass either.