$ $

Characterizing Recurrence Relations

Divide and conquer recurrences:

Linear recurrences:

Tail Recursion

Tail Recursion

Is this tail recursion?

public static int sum(int[] numbers, int index) {

    if (index < 0) {
        return 0;
    } else {
        return numbers[index] + sum(numbers, index - 1);
    }

}

Sometimes possible to convert to tail recursive method

private static int sum1(int[] numbers, int index, int accumulator) {

    if (index < 0) {
        return accumulator;
    } else {
        accumulator += numbers[index];
        return sum1(numbers, index - 1, accumulator);
    }

}

Then we can remove recursion

private static int sum2(int[] numbers, int index, int accumulator) {

    while (true) {
        if (index < 0) {
            return accumulator;
        } else {
            accumulator += numbers[index];
            index--;
        }
    }
}