First, we make our way down to the base case: mystery([7, -2, -8, 10]) ------------------------ values = [7, -2, -8, 10] myst_rest = mystery([-2, -8, 10]) = ... return ... mystery([-2, -8, 10]) --------------------- values = [-2, -8, 10] myst_rest = mystery([-8, 10]) = ... return ... mystery([-8, 10]) --------------------- values = [-8, 10] myst_rest = mystery([10]) = ... return ... mystery([10]) ------------- values = [10] myst_rest = mystery([]) = ... return ... mystery([]) ----------- values = [] return [] Then, we work our way back through the sections for the previous calls, which gives the following complete answer: mystery([7, -2, -8, 10]) ------------------------ values = [7, -2, -8, 10] myst_rest = mystery([-2, -8, 10]) = [10, -8, -2] return [7] + [10, -8, -2] = [7, 10, -8, -2] mystery([-2, -8, 10]) --------------------- values = [-2, -8, 10] myst_rest = mystery([-8, 10]) = [10, -8] return [10, -8] + [-2] = [10, -8, -2] mystery([-8, 10]) --------------------- values = [-8, 10] myst_rest = mystery([10]) = [10] return [10] + [-8] = [10, -8] mystery([10]) ------------- values = [10] myst_rest = mystery([]) = [] return [10] + [] = [10] mystery([]) ----------- values = [] return []