How does peeling off L[0] and trusting the function you haven't finished writing turn summing a list into a loop-free recursive step?
Short drills on what this video just taught. Write the code, run the checks, and reveal the answer only if you are stuck.
total_recur peels the first element off the front and hands the rest of the list to another call. The shipped version stops as soon as the list it is handed is empty.
Start it on [8, 3, 5] and trace it on paper. Write down the value of L for every call that happens — beginning with the whole starting list and ending with the list that arrives at the call which peels nothing off at all. Assign that sequence to calls as a list of lists, in the order the calls happen.
The peel-one-element decomposition of a list sum
Take [10, 20, 30, 40, 50, 60], pull off the 10, and write the sum as 10 plus the sum of the remainder, repeating down to a one-element list.
total_recur beside the iterative total_iter
Write both versions out, the for loop with its running result, and return L[0] + total_recur(L[1:]) with the empty-list or one-element base case.
Trusting the function you are still writing
Record the rule that the recursive call takes L[1:] and never L itself, then build the answer back up through 60, 110, 150, 180, 200 and 210.
total_len_recur and the cost of call overhead
Write the variant returning len(L[0]) + total_len_recur(L[1:]), check it on ['ab', 'c', 'defgh'] for 8, and record that it runs slightly slower than the loop.