"""This module contains code from Think Python by Allen B. Downey http://thinkpython.com Copyright 2012 Allen B. Downey License: GNU GPLv3 http://www.gnu.org/licenses/gpl.html """ import math def factorial(n): """Computes factorial of n.""" if n == 0: return 1 else: recurse = factorial(n-1) result = n * recurse return result def estimate_pi(): """Computes an estimate of pi. Algorithm due to Srinivasa Ramanujan, from http://en.wikipedia.org/wiki/Pi """ total = 0 k = 0 factor = 2 * math.sqrt(2) / 9801 while True: num = factorial(4*k) * (1103 + 26390*k) den = factorial(k)**4 * 396**(4*k) term = factor * num / den total += term if abs(term) < 1e-15: break k += 1 return 1 / total print estimate_pi()