Proving Correctness of Recursive Multiplication
We prove that this function computes x*y:
private static int f(int x, int y) { if (y == 0) { return 0; } else { if (y % 2 == 0) { int z = f(x, y / 2); return (2 * z); } else { return (x + f(x, y - 1)); } } }
By translating Java code into math, we obtain the following mathematical definition of :
By induction on we then prove .
- Base case. Let . Then
- Inductive hypothesis. Assume that the claim holds for all values less than .
- Goal: show that it holds for where .
- Case 1: . Note . By definition and I.H.
-
- Case 2: . Note . By definition and I.H.
This completes the proof.