#! /usr/bin/env python3
# -*- coding: utf-8 -*-


def dls(b, d):
    assert b >= 2 and d >= 0
    return sum(b ** k for k in range(d + 1))


def iddfs(b, d):
    assert b >= 2 and d >= 0
    return sum(dls(b, k) for k in range(d + 1))


def dls_approximation(b, d):
    assert b >= 2 and d >= 0
    return b / (b - 1) * b ** d


def iddfs_approximation(b, d):
    assert b >= 2 and d >= 0
    return (b / (b - 1)) ** 2 * b ** d


def print_iddfs_values(b, d):
    exact_value = iddfs(b=b, d=d)
    approx_value = iddfs_approximation(b=b, d=d)
    print("IDDFS(b=%2d, d=%2d) = %7d   [approx = %10.2f]" % (
        b, d, exact_value, approx_value))


def print_examples():
    print_iddfs_values(b=10, d=5)
    print()
    for d in range(21):
        print_iddfs_values(b=2, d=d)


if __name__ == "__main__":
    print_examples()
