I would like to know why I am getting an infinite loop here. I just don’t want to pass this initial values, so if they are undefined they get automatically calculated. Its just to clean my function call to use only a single parameter. If I pass them everything runs ok and the process ends. Can anyone help? Thanks
function merge(array, lower, half, upper){
//Suppressed for the sake of brevity
}
function mergeSort(array, lower, upper){
if(!lower && !upper){ //take a look here
lower = 0;
upper = array.length - 1;
}
if(lower < upper){
var half = Math.floor((lower + upper)/2);
mergeSort(array, lower, half);
mergeSort(array, half + 1, upper);
merge(array, lower, half, upper);
}
}
var array = [8, 3, 6, 4, 1, 0, 23, 12, 15, 63];
mergeSort(array); //infinite loop here
console.log(array);
Your very first recursive call to
mergeSortpassed it0as first argument, because you set it so.since
!0also evalutes tofalse, here you go..Better check against
undefinedby using thetypeofoperatoror, even better, check the
arguments.length, like