Renato Gama
Renato Gama

Reputation: 16529

Why am I getting an infinite loop when I don't define the parameters?

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);

Upvotes: 6

Views: 259

Answers (1)

jAndy
jAndy

Reputation: 236032

Your very first recursive call to mergeSort passed it 0 as first argument, because you set it so.

since !0 also evalutes to false, here you go..

Better check against undefined by using the typeof operator

if(typeof lower === 'undefined' && typeof upper === 'undefined'){ //take a look here
    lower = 0;
    upper = array.length - 1;
}

or, even better, check the arguments.length, like

if( arguments.length === 1 ) {
   var lower = 0,
       upper = array.length -1 ;
}

Upvotes: 7

Related Questions