$ $
A method is “tail recursive” if the recursive call is the last thing that happens.
public static int search(int[] numbers, int target, int index) { if (index < 0) { return -1; } else if (numbers[index] == target) { return index; } else { return search(numbers, target, index - 1); } }
May be mechanically converted to a while loop.
public static int search1(int[] numbers, int target, int index) { while (true) { if (index < 0) { return -1; } else if (numbers[index] == target) { return index; } else { index--; } } }
public static int sum(int[] numbers, int index) { if (index < 0) { return 0; } else { return numbers[index] + sum(numbers, index - 1); } }
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); } }
private static int sum2(int[] numbers, int index, int accumulator) { while (true) { if (index < 0) { return accumulator; } else { accumulator += numbers[index]; index--; } } }