# Quiz 3 Recursion Memory Diagram Practice

Hello everyone! This is Part 3 of practice questions for the upcoming Quiz 03 on Tuesday, November 10th. Part 1 (already posted) covered OOP code writing questions, Part 2 covered OOP memory diagrams, and this will be focusing on recursion memory diagram practice. The solutions for these problems can be found here. Good luck :)

## Instructions

Please create a memory diagram for each problem documenting the entire execution of the program like you have practiced in class.

## Review Problems

This combines OOP with Lists and recursion!

### 1. Ball is Life

``````from __future__ import annotations
from typing import List

class Baller:
name: str
avg: float

def __init__(self, name: str, avg: float):
"""Constructor for Student class."""
self.name = name
self.avg = avg

def team_sum(team: List[Baller]) -> float:
if len(team) == 0:
return 0
else:
points: float = team[len(team) - 1].avg
team.pop()
return points + team_sum(team)

def main() -> None:
"""Entrypoint of program."""
b1: Baller = Baller("Cole", 18.7)
b2: Baller = Baller("Bacot", 12.3)
b3: Baller = Baller("Francis", 0.1)

ballers: List[Baller] = [ b1, b2, b3 ]
total: float = team_sum(ballers)
print("Average is: " + str(total / 3))
print(ballers)

if __name__ == "__main__":
main()``````

### 2. Christmas Fun

This one is kind of challenging…

``````def fun_math(x: int, y: str) -> int:
if x <= 0:
return 1
elif len(y) > 5:
return x * fun_math(x - 2, "Santa") * fun_math(x - 3, "Clause")
else:
return x + fun_math(x - 1, "Rudolph") + fun_math(x - 2, "Snow")

def main() -> None:
"""Entrypoint of program."""
x: int = 5
y: str = "Christmas"
z: int = fun_math(x, y)

if __name__ == "__main__":
main()``````