from typing import List


def get_pmf(n: int) -> List[float]:
    """Return the pmf for the number of hops it takes the frog to cross a river
    with n lily pads.
    
    For n lily pads this can be expressed as the product of n sums.  This method
    uses recursion to calculate this value.

    Arguments:
        n: int
            The number of lily pads in the river

    Returns:
        List[float]: list of floats representing the probability that the frog
            takes <index> hops to cross the river.
    """

    def inner_sum(min: int, max: int) -> float:
        """Calculate the inner sum recursively.
        
        Arguments:
            min: int
                lower limit of the first sum
            max: int
                upper limit of the first sum

        Returns:
            float: the inner sum needed to calculate pmf(i)
        """
        if min == 0:
            return 1.0
        total = 0
        for i in range(min, max + 1):
            total += (1 / i) * inner_sum(min - 1, i - 1)
        return total

    pmf = [0.0]
    for i in range(1, n + 2):
        pmf.append((1 / (n + 1)) * inner_sum(i - 1, n))
    return pmf