Working with the web is always chancy because you may not have connectivity. You don't want anything to hang, so you need your calls to be asynchronous. Here's a nice library that handles that for you:
http://loopj.com/android-async-http/
Recursive algorithms can be slow because they end up solving the same little problems over and over again. To speed them up, you can use a technique called "memoization." Memoization allows algorithms go much more quickly by remembering solutions to problems they have already solved. I’m the recursive algorithm. This blog is my memoization.