contents oo concepts encapsulation polymorphism inheritance summary exercises algorithm design and recursion searching simple searching problem strategy linear search strategy binary search comparing algorithms recursive problem-solving recursive definitions recursive functions examplestring reversal exampleanagrams examplefast exponentiation examplebinary search recursion vs iteration sorting algorithms naive sortingselection sort divide and conquermerge sort comparing sorts hard problems towers of hanoi the halting problem conclusion summary exercises