0

I have been given the function below in pseudocode and I am trying to translate it to JS, but I keep getting an infinity loop.


Update

Thanks zord, mid fixed the recursion issue. Now I get the wrong sum, any suggestions?

What am I doing wrong?

function SUM(arr, left, right){
  
    if(left > right){ 
        return 0 
    }
    else if(left == right){
      return arr[left]
    }

    mid = Math.floor((left + right) / 2);

    lsum = SUM(arr,left,mid);
    rsum = SUM(arr,mid+1,right); 

    return lsum + rsum

}

arr = [1,2,3,4,5]
left = 0;
right = arr.length - 1;


console.log(SUM(arr, left, right));

Thanks!

1
  • 2
    I suspect you just need to declare your variables mid, lsum, and rsum instead of having them as implicit globals Commented Dec 15, 2021 at 20:11

1 Answer 1

1

mid should be halfway between left and right:

mid = Math.floor((left + right) / 2);

Also, you need to make your variables block scoped as VLAZ mentioned. Otherwise they will be global, and overwritten by different runs of the function.

const mid = Math.floor((left + right) / 2);

const lsum = SUM(arr, left, mid);
const rsum = SUM(arr, mid + 1, right); 
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks @zord! That fixed the loop. Getting 17 for the SUM instead of 15. Any suggestions?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.