I debugged some of this code, and came to the conclusion that 

1. The recursion element of the code is what's screwing it up.  I can
increase the size of the stack, but the code uses too much recursion,
which overflows it, crashing my program.  I'm rewriting solve() to use
an iterative solution.  This solution may require me to combine climb()
and solve() into one function.

2. I wanted to implement a steepest ascent variant with random restarts,
but I found that I was implementing a stochastic hill climbing algorithm
with random restarts, instead.  The new solution will utilize a steepest
ascent version of the hill climbing algorithm by using another function
to work though every neighbor state to find the one that gets me closest
to the solution of the problem.