Exercise 1: Hand-Tracing MaxOfDivideConquer on [5, 12, 3, 8] — Possible Solution ==================================================================== THE SPLIT ------------------------------ list = [5, 12, 3, 8], length 4, mid = 4/2 = 2 Left half: [5, 12] (indices 0 to 1) Right half: [3, 8] (indices 2 to 3) SOLVING THE LEFT HALF: MaxOfDivideConquer([5, 12]) ------------------------------ Length is 2, not 1, so split again: mid = 1 Left: [5] -> base case, length 1, RETURN 5 Right: [12] -> base case, length 1, RETURN 12 Combine: left_max=5, right_max=12. Since 12 > 5, RETURN 12. SOLVING THE RIGHT HALF: MaxOfDivideConquer([3, 8]) ------------------------------ Length is 2, split again: mid = 1 Left: [3] -> base case, length 1, RETURN 3 Right: [8] -> base case, length 1, RETURN 8 Combine: left_max=3, right_max=8. Since 8 > 3, RETURN 8. FINAL COMBINE ------------------------------ left_max (from [5,12]) = 12 right_max (from [3,8]) = 8 Since 12 > 8, RETURN 12. FINAL ANSWER: 12 WHY THIS IS CORRECT ------------------------------ 12 is indeed the largest value in [5, 12, 3, 8] - confirmed by inspection, and by the recursive process itself never discarding any element without comparing it: every one of the four original values was eventually part of some base-case return value, and every combine step correctly kept the larger of its two inputs. WHY THIS WORKS AS AN ANSWER ------------------------------ The trace follows the recursion down to every base case explicitly before combining back up, mirroring exactly the split-then-combine structure this chapter's own worked example used, rather than jumping straight to the final answer.