Binary Chop, Recursively

| No Comments

Doing it recursively is a simple re-write. The while changes to an if and the asignments of hi and lo turn into recursive calls. In a language with tail call removal, this would not be any worse than the iterative version. I don't think Ruby is one of those languages. However, I do think this version is a bit easier to read than the first one.

module BinChopper

    def chop(n, a)
        return recursive_chop(n, a, a.length - 1, 0)
    end

    def recursive_chop(n, a, hi, lo)
        if lo > hi
            return -1
        end
        mid = (lo + hi) / 2
        if a[mid] == n
            return mid
        elsif (a[mid] > n)
            return recursive_chop(n, a, mid - 1, lo)
        else
            # a[mid] must be less than n
            return recursive_chop(n, a, hi, mid + 1)
        end
    end

end