Analyzing Recursive Programs using Fixed-point Calculus