def reverse_string(string, result=None):
    """reverse_string(str) -> str

    Reverse a string using recursion.

    Note:
        Does not slice (e.g. string[::-1]) or use iteration.

    >>> reverse_string('hello')
    olleh
    >>> reverse_string('hello world')
    dlrow olleh
    >>> reverse_string('123456789')
    987654321
    """
    if not isinstance(string, str):
        raise TypeError("Must be a string")

    if result is None:
        result = []

    if len(string) == len(result):
        return ''.join(result)

    # Assigned a variable for readablity.
    offset = (len(string) - 1) - len(result)
    result.append(string[offset])
    return reverse_string(string, result)