Nested Loops and Recursive Functions

these two concepts are making knots on my mind. Specially recursive functions. What were the examples of codes and/or analogies that worked best FOR YOU personally and made it click?

For me the thing that helped is that a recursive function is structured like a proof by induction.

If you can go into more detail about what does and doesn’t confuse you, I’d be happy to try explaining things in a way that makes sense to you.

function sum(arr, n) {
   if (n <= 0) {
      return 0;
    } else {
      return sum(arr, n - 1) +arr[n - 1];

Take this function that sums the first n elements of an array for example.
sum(arr, n - 1) is the part that confuses me most. I get that +arr[n -1] is gonna sum the elements of the array from the highest n to the beginning of the array, index 0, going one index down each time the function is called. But i don’t get to what it sums, if that makes sense.

The function sum() will always return a number (as long as arr is an array of numbers). If n is zero (or less), then it will return 0. If n is more than zero, it will add whatever number sum(arr, n-1) is to the number in arr at position n-1.

One of the tasks that helped me to really appreciate recursive functions is “inverting a binary tree”.
While you can write a lot of loops as recursive functions, they usually seem wasted, if not worse. But for inverting a binary tree, it’s just beautiful in it’s simplicity.

Nested loops on the other hand never were a problem for me ^^