I was reading this ARTICLE about SEGMENT TREES on geeksforgeeks and found an implementation but i am unable to clearly visualize how is this function working.

Article is based on Problem

We have an array arr[0 . . . n-1]. We should be able to 1 Find the sum of elements from index l to r where 0 <= l <= r <= n-1 2 Change value of a specified element of the array arr[i] = x where 0 <= i <= n-1.

Function:

```
int constructSTUtil(int arr[], int ss, int se, int *st, int si)
{
// If there is one element in array, store it in current node of
// segment tree and return
if (ss == se)
{
st[si] = arr[ss];
return arr[ss];
}
// If there are more than one elements, then recur for left and
// right subtrees and store the sum of values in this node
int mid = getMid(ss, se);
st[si] = constructSTUtil(arr, ss, mid, st, si*2+1) +
constructSTUtil(arr, mid+1, se, st, si*2+2);
return st[si];
}
```

I am bad at understanding recursionâ€¦

Can anyone please explain me with a proper visualization of how is this function workingâ€¦

Pleaseâ€¦